2012-10-08 57 views
2

如何将变量名称转换为字符串将变量名称转换为字符串

例子:

从这:

NSString *someVariable 
int otherVariable 

我想要得到的NSString与变量的实际名称,不管它是什么类型。
因此,对于上述两个变量,我想获取他们的名字(someVariable,otherVariable)。

回答

5

我设法解决我的问题与此代码段:

导入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; 
} 

希望它可以帮助别人。

0

这些是C声明,而C没有反思能力给你你想要的东西。

你也许可以编写一个预处理器宏来声明一个变量,并且声明并初始化第一个变量的名字。

但是这引出了你为什么需要这个级别的内省的问题。

+0

我正在阅读json的一些节点,我在我的应用程序中使用节点名称作为变量。我这样做是因为我为每个节点添加了三个相似的名称(node,node_waiting,node_rejected),所以我跳转到使用变量名称的方式,我不必创建变量数量的3倍。 – tagyro

1

只需在变量名称周围添加“...”即可。即

"someVariable" 
"otherVariable" 

得到的字符串(作为const char*)。如果你想要一个NSString*,使用

@"someVariable" 
@"otherVariable" 

在一个宏,您可以使用建筑#...把报价...引文结束围绕一个宏观变量,例如

#define MyLog(var) NSLog(@"%s=%@", #var, var) 

使

MyLog(foo); 

扩大到

NSLog(@"%s=%@", "foo", foo);