将变量名称转换为字符串

时间:2012-10-08 15:21:03

标签: objective-c

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

示例:

由此:

NSString *someVariable
int otherVariable

我希望获得一个带有变量实际名称的NSString,无论它是什么类型 所以,对于上面的两个变量,我想得到他们的名字( someVariable otherVariable )。

3 个答案:

答案 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没有内省功能来提供你想要的东西。

您可能编写一个预处理器宏,既可以声明变量,也可以使用第一个变量声明和初始化第二个变量。

但这引出了为什么你需要这种内省水平的问题。