2013-02-21 70 views
3

我在一个对象上设置了一些属性,主要是GLfloat,我想知道是否有一种方法可以使用[self setValue:(id)value forKey:(id)key];来获取c样式变量?有没有办法使用setValue:forKey将采取C型变量?

如果有可用替代方案,则不一定是setValue:forKey

我的推理是我有很多属性对象是floats,我可以通过带有值(NSNumber这里是没有问题的)NSDictionary来设置每个相关的值。

理想情况下,我可以做到这一点没有统计员或自定义setters - 这是可行的吗?

+0

你总是可以使用NSValue对象来“包装”其他实体。不一定方便。但是,当然,NSNumber适用于花车。 – 2013-02-21 12:37:30

回答

4

类似地,setValue:forKey:确定指定键的适当访问器或实例变量所需的数据类型。如果 数据类型不是对象,则使用相应的-Value方法从传入的对象中提取值。

你可以通过一个NSNumber,它会自动转换回你的设置浮动。

@interface MyClass() 

@property (nonatomic, assign) CGFloat example; 

@end 

@implementation MyClass 

- (void)testSetter { 
    [self setValue:@(5.0f) forKey:@"example"]; 
} 

@end 
+0

您的答案与其他答案有何不同? – trojanfoe 2013-02-21 13:00:11

+0

另一个答案没有解释天气的财产仍然是一个浮动,或天气的财产是一个NSNumber。 (自动值转换) – kylef 2013-02-21 13:01:43

4

您可以使用新的Objective-C语法自动框中的任何值转换成的NSNumber:

GLfloat alpha; 
alpha = 2.3f; 

[self setValue:@(alpha) forKey:@"theKey"]; 

这将浮球自动转换成一个NSNumber您以最小的大惊小怪。

+0

我刚刚试过这个,并在计划' – Fonix 2013-02-21 12:38:49

+1

中发生@alpha错误'意外'@'对不起,我更新了答案。你需要把它包装在parens中。 – 2013-02-21 12:41:10

相关问题