我正在为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语句,这些语句将返回每个输入字符串的值。但是,有没有办法实现这个程序化?
答案 0 :(得分:6)
您希望使用KVC(键值编码),它完全按照您的描述进行操作,但您不需要实现任何方法来使其工作。它确实适用于对象,因此double
将包含在NSNumber
:
@property (nonatomic, strong) NSNumber *test;
NSNumber *value = [mlc valueForKey:@"test"];
答案 1 :(得分:3)
由于属性是方法,您可以通过performSelector:
调用它们。要从字符串中创建选择器,请使用NSSelectorFromString
。 double
将包含在id
类型的NSNumber
对象中,因此您需要通过调用doubleValue
将其撤回:
SEL toCall = NSSelectorFromString(@"test");
double value=[[mlc performSelector:toCall] doubleValue];