gpt4 book ai didi

objective-c - 如何在 Objective-C 中获取实例变量的名称?

转载 作者:行者123 更新时间:2023-11-28 18:13:22 26 4
gpt4 key购买 nike

我正在尝试从 Objective-C 类中获取实例变量的名称。假设我有一个看起来像这样的类:

@interface MyClass : NSObject

@property (nonatomic, copy) NSSNumber *myVar;

@end

给定 myVar,我想得到“myVar”。然后我可以在这样的日志中使用它:

MyClass *myObject = [[myClass alloc] init];
NSLog(@"The variable is named: %@", getVarName([myObject myVar]));

然后日志会说:变量名为 myVar。感谢您的帮助!

PS 我想这样做的原因是创建一个编码变量归档的方法。所以当我编写我的 encodeWithCoder 方法时,我可以这样做:

- (void)encodeWithCoder:(NSCoder *)aCoder
{
NSArray *varsForEncoding = [[NSArray alloc] initWithObjects:var1, var2, var3, nil];
for (NSObject *var in varsForEncoding)
{
[aCoder encodeObject:var forKey:getVarName(var)];
}
}

然后在initWithCoder中做相反的事情。这样可以防止错别字搞砸了,例如编码时使用键 @"myVar" 但在初始化程序中键入 @"mVar"

最佳答案

你可以试试这个方法:

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

( source )

关于objective-c - 如何在 Objective-C 中获取实例变量的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com