@属性 (nonatomic) double longitude &@属性 (nonatomic, retain) NSNumber * longitude; 之间的区别

Differences between@property (nonatomic) double longitude &@property (nonatomic, retain) NSNumber * longitude;

我将 Entity longitude 设置为 double 并创建 NSManagedObject 子类。在 properties.h 我得到的经度是

 @property (nonatomic) double longitude;

然后跳出错误为

Assigning to 'double' from incompatible type 'NSNumber *'

下一行

photo.longitude=@([photoDictionary[FLICKR_LONGITUDE] doubleValue]);

在我将代码更改为

之前,事情并不顺利
@property (nonatomic, retain) NSNumber * longitude;

我对这些感到困惑。

如有任何建议,我们将不胜感激。

根据 documentation:

NSNumber is a subclass of NSValue that offers a value as any C scalar (numeric) type. It defines a set of methods specifically for setting and accessing the value as a signed or unsigned char, short int, int, long int, long long int, float, or double or as a BOOL.

NSNumber 是一个 class,它封装了一个原始值(例如 double 在你的例子中)并提供了一个面向对象的接口(除其他外)。

您想要做的是将类型 NSNumber 的对象分配给类型 double 的 属性 (因此显示错误)。

但是,使用此代码...

photo.longitude=@([photoDictionary[FLICKR_LONGITUDE] doubleValue]);

...您通过在返回的 NSNumber 上调用 doubleValuephotoDictionary 获得 double,然后将其重新包装在 [=11= 中] 使用 NSNumber 文字:@(...)。如果你删除文字并简单地将 [photoDictionary[FLICKR_LONGITUDE] doubleValue] 直接分配给 photo.longitude 你应该没问题。