只是想知道从CGFloat
中提取NSDictionary
的语法如下:
slider.minimumValue = [filterAttributes valueForKey:kCIAttributeSliderMin];
答案 0 :(得分:7)
NSDictionary
只保存对象。什么样的对象会包裹像CGFloat
这样的原语? NSNumber
会有意义。现在,由于CGFloat
是float
或double
,您可能希望获得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对象。很抱歉可能导致的任何混淆交换。