无论如何从变量名获取字符串?

hac*_*nal 18 objective-c nsstring

说我上课了

@interface Person : NSObject { NSString *name; }
Run Code Online (Sandbox Code Playgroud)

我需要在课堂上获得NSString的名字

Person *person = [[Person alloc] init];
NSLog(@"Name of variable %s\n", _NameofVariable_(person->name));
Run Code Online (Sandbox Code Playgroud)

感谢您的回答,这是我从回复中提出的解决方案

//returns nil if property is not found
-(NSString *)propertyName:(id)property {  
    unsigned int numIvars = 0;
    NSString *key=nil;
    Ivar * ivars = class_copyIvarList([self class], &numIvars);
    for(int i = 0; i < numIvars; i++) {
        Ivar thisIvar = ivars[i];
        if ((object_getIvar(self, thisIvar) == property)) {
            key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];
            break;
        }
    } 
    free(ivars);
    return key;
}  
Run Code Online (Sandbox Code Playgroud)

And*_*kha 36

一样容易

#define VariableName(arg) (@""#arg)

然后你做:

NSObject *obj;
NSString *str = VariableName(obj);
NSLog(@"STR %@", str);//obj
Run Code Online (Sandbox Code Playgroud)


Chu*_*uck 4

您可以使用Objective-C 运行时 API函数获取类的实例变量的名称class_copyIvarList。然而,这是相当复杂的,很少有人这样做,而且几乎从来都不是完成某件事的最佳方式。如果您心中有一个比纯粹好奇更具体的目标,那么询问如何在 Objective-C 中实现它可能是个好主意。

\n\n

另外,顺便说一下,person.nameObjective-C \xe2\x80\x94 中没有指定实例变量,它是属性调用。实例变量将为person->name.

\n