Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 有没有一种方法可以使用setValue:forKey来获取C类型变量?_Iphone_Objective C - Fatal编程技术网

Iphone 有没有一种方法可以使用setValue:forKey来获取C类型变量?

Iphone 有没有一种方法可以使用setValue:forKey来获取C类型变量?,iphone,objective-c,Iphone,Objective C,我在对象上设置了一些属性,主要是GLfloat,我想知道是否有方法使用[self-setValue:(id)value-forKey:(id)key]这将需要一个c风格的变量 如果有替代方案,则不必是setValue:forKey 我的理由是,我在一个对象上有许多属性是浮动的,我可以传递一个NSDictionary,其中包含值(NSNumber,这里没有问题)来设置每个相关值 理想情况下,我可以在没有枚举器或自定义设置器的情况下执行此操作-这可行吗?您可以使用新的Objective-C语法将任何

我在对象上设置了一些属性,主要是
GLfloat
,我想知道是否有方法使用
[self-setValue:(id)value-forKey:(id)key]这将需要一个c风格的变量

如果有替代方案,则不必是
setValue:forKey

我的理由是,我在一个对象上有许多属性是
浮动的
,我可以传递一个
NSDictionary
,其中包含值(
NSNumber
,这里没有问题)来设置每个相关值


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

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

GLfloat alpha;
alpha = 2.3f;

[self setValue:@(alpha) forKey:@"theKey"];
这将自动将浮点数转换为NSNumber,为您带来最小的麻烦

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

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

@interface MyClass ()

@property (nonatomic, assign) CGFloat example;

@end

@implementation MyClass

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

@end

始终可以使用NSValue对象“包装”其他实体。不一定方便。但是,当然,NSNumber适用于浮点数。我只是尝试了一下,在程序“你的答案与另一个答案有何不同?另一个答案没有解释属性是否仍然是浮点数,或者属性是否是NSNumber”中使用@alpha会出现“意外”错误。(自动值转换)