如何根据字符串名称获取变量的值?
How to get the value of a variable based on it's string name?
我想获取 Objective-C class 中所有 ivar 的值并将它们加载到数组中。
我有以下代码:
Class class = [self class];
NSString *myClassName = NSStringFromClass([self class]);
unsigned int count;
Ivar *ivars = class_copyIvarList(class, &count);
for (int i=0; i<count; i++) {
Ivar ivar = ivars[i];
const char* name = ivar_getName(ivar);
const char* typeEncoding = ivar_getTypeEncoding(ivar);
NSLog(@"Class Name: %@ ivar: %s Type Encoding: %s",myClassName, name, typeEncoding);
}
所以我将名称作为字符串 (name),现在我需要那个 ivar 的值。
类似于:
value = [self valueFromStringName(name)];
因此,如果我有一个名为 myDate
的日期,我可以将字符串 myDate
传递给一个方法,它会 return 它持有的日期值。
我看到 运行 从方法的字符串名称中获取方法的例程,但还没有看到可以从字符串名称中获取值的位置。
鉴于您已经在使用运行时函数,为什么不继续使用:
id object_getIvar(id object, Ivar ivar)
获取ivar的值?
如果您真的想使用字符串,请在 NSObject
上查找 KVC、"Accessor Search Patterns for Simple Attributes" 和 valueForKey:
。
HTH
我想获取 Objective-C class 中所有 ivar 的值并将它们加载到数组中。
我有以下代码:
Class class = [self class];
NSString *myClassName = NSStringFromClass([self class]);
unsigned int count;
Ivar *ivars = class_copyIvarList(class, &count);
for (int i=0; i<count; i++) {
Ivar ivar = ivars[i];
const char* name = ivar_getName(ivar);
const char* typeEncoding = ivar_getTypeEncoding(ivar);
NSLog(@"Class Name: %@ ivar: %s Type Encoding: %s",myClassName, name, typeEncoding);
}
所以我将名称作为字符串 (name),现在我需要那个 ivar 的值。
类似于:
value = [self valueFromStringName(name)];
因此,如果我有一个名为 myDate
的日期,我可以将字符串 myDate
传递给一个方法,它会 return 它持有的日期值。
我看到 运行 从方法的字符串名称中获取方法的例程,但还没有看到可以从字符串名称中获取值的位置。
鉴于您已经在使用运行时函数,为什么不继续使用:
id object_getIvar(id object, Ivar ivar)
获取ivar的值?
如果您真的想使用字符串,请在 NSObject
上查找 KVC、"Accessor Search Patterns for Simple Attributes" 和 valueForKey:
。
HTH