2

只是想知道从以下内容中提取 a 的语法是CGFloat什么NSDictionary

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

2 回答 2

7

AnNSDictionary只持有对象。什么样的对象会包装一个像这样的原语CGFloatNSNumber会有意义。现在,由于CGFloat是 afloat或 a double,您可能希望获得double保留精度/范围的值。

所以:

slider.minimumValue = [[filterAttributes valueForKey:kCIAttributeSliderMin] doubleValue];
于 2013-01-30T19:42:48.687 回答
7

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

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

NSNumber *sliderMin = [NSNumber numberWithFloat:kCIAttributeSliderMin]

或者使用新的语法,你可以说@kCIAttributeSliderMin@(kCIAttributeSliderMin)自动装箱为 NSNumber。

要取回该值,您将检索对象,NSNumber然后说,[myNumber floatVal]以获取NSFloat.

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

更新-抱歉,在您的示例中,您将kCIAttributeSliderMin其视为键,而我将其用作“值”;但我想你明白了。存储一个 NSNumber 对象;检索一个 NSNumber 对象。对于可能造成的任何混乱交换,我们深表歉意。

于 2013-01-30T19:46:17.753 回答