1

我正在为 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 语句,这些语句将为每个输入字符串返回值。但是,有没有办法以编程方式实现这一目标?

4

2 回答 2

7

您想使用完全符合您描述的 KVC(键值编码),但您不需要实现任何方法使其工作。它确实适用于对象,所以你double会被包裹在一个NSNumber

@property (nonatomic, strong) NSNumber *test;

NSNumber *value = [mlc valueForKey:@"test"];
于 2013-07-28T10:52:44.167 回答
3

由于属性是方法,因此您可以通过performSelector:. 要从字符串使用选择器NSSelectorFromString。将double被包装在一个id类型的对象中NSNumber,因此您需要通过调用将其拉回doubleValue

SEL toCall = NSSelectorFromString(@"test");
double value=[[mlc performSelector:toCall] doubleValue];
于 2013-07-28T10:55:39.523 回答