如何将变量名称转换为字符串?
示例:
由此:
NSString *someVariable
int otherVariable
我希望获得一个带有变量实际名称的NSString,无论它是什么类型 所以,对于上面的两个变量,我想得到他们的名字( someVariable , otherVariable )。
答案 0 :(得分: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;
}
希望它有所帮助。
答案 1 :(得分:1)
只需在变量名称周围添加“...”即可。即。
"someVariable"
"otherVariable"
获取字符串(作为const char*
。)如果您需要NSString*
,请使用
@"someVariable"
@"otherVariable"
在宏中,您可以使用构造#...
将引号...取消引用宏变量,例如。
#define MyLog(var) NSLog(@"%s=%@", #var, var)
这样
MyLog(foo);
扩展为
NSLog(@"%s=%@", "foo", foo);
答案 2 :(得分:0)
这些是C声明,而C没有内省功能来提供你想要的东西。
您可能编写一个预处理器宏,既可以声明变量,也可以使用第一个变量声明和初始化第二个变量。
但这引出了为什么你需要这种内省水平的问题。