如何将变量名称转换为字符串?将变量名称转换为字符串
例子:
从这:
NSString *someVariable
int otherVariable
我想要得到的NSString与变量的实际名称,不管它是什么类型。
因此,对于上述两个变量,我想获取他们的名字(someVariable,otherVariable)。
如何将变量名称转换为字符串?将变量名称转换为字符串
例子:
从这:
NSString *someVariable
int otherVariable
我想要得到的NSString与变量的实际名称,不管它是什么类型。
因此,对于上述两个变量,我想获取他们的名字(someVariable,otherVariable)。
我设法解决我的问题与此代码段:
导入objc运行
#import <objc/runtime.h>
,您可以用列举的特性:
- (NSArray *)allProperties
{
unsigned count;
objc_property_t *properties = class_copyPropertyList([self class], &count);
NSMutableArray *rv = [NSMutableArray array];
unsigned i;
for (i = 0; i < count; i++)
{
objc_property_t property = properties[i];
NSString *name = [NSString stringWithUTF8String:property_getName(property)];
[rv addObject:name];
}
free(properties);
return rv;
}
希望它可以帮助别人。
这些是C声明,而C没有反思能力给你你想要的东西。
你也许可以编写一个预处理器宏来声明一个变量,并且声明并初始化第一个变量的名字。
但是这引出了你为什么需要这个级别的内省的问题。
只需在变量名称周围添加“...”即可。即
"someVariable"
"otherVariable"
得到的字符串(作为const char*
)。如果你想要一个NSString*
,使用
@"someVariable"
@"otherVariable"
在一个宏,您可以使用建筑#...
把报价...引文结束围绕一个宏观变量,例如
#define MyLog(var) NSLog(@"%s=%@", #var, var)
使
MyLog(foo);
扩大到
NSLog(@"%s=%@", "foo", foo);
我正在阅读json的一些节点,我在我的应用程序中使用节点名称作为变量。我这样做是因为我为每个节点添加了三个相似的名称(node,node_waiting,node_rejected),所以我跳转到使用变量名称的方式,我不必创建变量数量的3倍。 – tagyro