有没有办法使用setValue:forKey,它将采用C型变量?

时间:2013-02-21 12:27:25

标签: iphone objective-c

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

如果有可用替代品,则不必是setValue:forKey

我的理由是我在floats的对象上有很多属性,我可以传递NSDictionary值(NSNumber这里没有问题)来设置每个相关值

理想情况下,我可以在没有枚举器或自定义设置器的情况下执行此操作 - 这是可行的吗?

2 个答案:

答案 0 :(得分:4)

您可以使用新的Objective-C语法自动将任何值插入NSNumber:

GLfloat alpha;
alpha = 2.3f;

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

这会自动将浮动转换为NSNumber,而且操作简单。

答案 1 :(得分:4)

  

同样,setValue:forKey:确定了所需的数据类型   指定键的适当访问器或实例变量。如果   数据类型不是对象,然后从中提取值   使用适当的-Value方法传递对象。

你可以传递一个NSNumber,它会自动转换回你的二传手的浮动。

@interface MyClass ()

@property (nonatomic, assign) CGFloat example;

@end

@implementation MyClass

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

@end