如何使用NSString获取NSObject的属性

时间:2013-07-28 10:48:23

标签: iphone objective-c oop

我正在为iPhone开发。有没有办法使用保存属性名称的NSString来获取属性?类似的东西:

@interface MyLovelyClass : NSObject

@property (nonatomic) double test;

-(double) returnDoubleProperty:(NSString *) propertyName;

然后调用它

MyLovelyClass *mlc=[[MyLovelyClass alloc] init];
double value=[mlc returnDoubleProperty:@"test"];

据我所知,如果我拥有有限数量的属性,我可以手动编写if else语句,这些语句将返回每个输入字符串的值。但是,有没有办法实现这个程序化?

2 个答案:

答案 0 :(得分:6)

您希望使用KVC(键值编码),它完全按照您的描述进行操作,但您不需要实现任何方法来使其工作。它确实适用于对象,因此double将包含在NSNumber

@property (nonatomic, strong) NSNumber *test;

NSNumber *value = [mlc valueForKey:@"test"];

答案 1 :(得分:3)

由于属性是方法,您可以通过performSelector:调用它们。要从字符串中创建选择器,请使用NSSelectorFromStringdouble将包含在id类型的NSNumber对象中,因此您需要通过调用doubleValue将其撤回:

SEL toCall = NSSelectorFromString(@"test");
double value=[[mlc performSelector:toCall] doubleValue];