如何將變量名稱轉換爲字符串?將變量名稱轉換爲字符串
例子:
從這:
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