2012-10-08 54 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);