3

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

setValue:forKey如果有可用的替代方案,则不必是替代方案。

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

理想情况下,我可以在没有枚举器或自定义设置器的情况下做到这一点——这可行吗?

4

2 回答 2

4

您可以使用新的 Objective-C 语法自动将任何值装箱到 NSNumber 中:

GLfloat alpha;
alpha = 2.3f;

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

这将自动为您将浮点数转换为 NSNumber,而无需大惊小怪。

于 2013-02-21T12:32:29.830 回答
4

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

您可以传递一个NSNumber,它会自动转换回您的设置器的浮点数。

@interface MyClass ()

@property (nonatomic, assign) CGFloat example;

@end

@implementation MyClass

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

@end
于 2013-02-21T12:55:35.723 回答