从NSDictionary中提取CGFloat的语法

时间:2013-01-30 19:39:20

标签: iphone ios cocoa-touch nsdictionary

只是想知道从CGFloat中提取NSDictionary的语法如下:

slider.minimumValue = [filterAttributes valueForKey:kCIAttributeSliderMin];

2 个答案:

答案 0 :(得分:7)

NSDictionary只保存对象。什么样的对象会包裹像CGFloat这样的原语? NSNumber会有意义。现在,由于CGFloatfloatdouble,您可能希望获得double值以保留精度/范围。

因此:

slider.minimumValue = [[filterAttributes valueForKey:kCIAttributeSliderMin] doubleValue];

答案 1 :(得分:7)

您只能将OBJECTS放入NSDictionary(或NSARRAY)。 CGFloat是一个文字(只是映射到一个浮点数),所以你不能把它放入或从字典中检索它。

相反,将其包装为NSNumber(当您将其添加到字典中时),这是一个对象。

NSNumber *sliderMin = [NSNumber numberWithFloat:kCIAttributeSliderMin]

或者使用新语法,您只需将@kCIAttributeSliderMin@(kCIAttributeSliderMin)称为autobox作为NSNumber。

要恢复该值,您需要将对象检索为NSNumber,然后说[myNumber floatVal]以获取NSFloat

最后,您可能想说“objectForKey”而不是“valueForKey”。

更新 - 抱歉,在您的示例中,您将kCIAttributeSliderMin视为关键,我将其用作“值”;但我认为你明白了。存储NSNumber对象;检索NSNumber对象。很抱歉可能导致的任何混淆交换。