首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从变量名中获取字符串?

如何从变量名中获取字符串?
EN

Stack Overflow用户
提问于 2010-03-21 05:07:20
回答 5查看 12.9K关注 0票数 19

假设我有我的课

@interface Person : NSObject { NSString *name; }

我需要在类中获取NSString的名称

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

感谢你的回答,这是我从回复中得到的解决方案

//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;
}  
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-21 05:40:24

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

另外,顺便说一句,person.name没有在Objective-C中指定实例变量--它是一个属性调用。实例变量将是person->name

票数 4
EN

Stack Overflow用户

发布于 2014-02-26 15:58:24

像这样简单

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

然后你就可以做到:

NSObject *obj;
NSString *str = VariableName(obj);
NSLog(@"STR %@", str);//obj
票数 37
EN

Stack Overflow用户

发布于 2010-03-21 08:21:19

您可以使用预处理器字符串和一些字符串:

NSUInteger lastIndexAfter(NSUInteger start, NSString *sub, NSString *str) {
    NSRange found = [str rangeOfString:sub options:NSBackwardsSearch];
    if(found.location != NSNotFound) {
        NSUInteger newStart = NSMaxRange(found);
        if(newStart > start)
            return newStart;
    }
    return start;
}

NSString *lastMember(NSString *fullName) {
    if(!fullName) return nil;

    NSUInteger start = 0;
    start = lastIndexAfter(start, @".", fullName);
    start = lastIndexAfter(start, @"->", fullName);

    return [fullName substringFromIndex: start];
}

#define NSStringify(v) (@#v)
#define _NameofVariable_(v) lastMember(NSStringify(v))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2484778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档