为什么Realm使用RealmOptional <int>而不是Int?可选属性?

时间:2015-10-27 00:55:22

标签: swift realm

Realm的documentation on optional properties州:

  可以使用标准Swift语法将

StringNSDateNSData属性声明为可选属性或非可选属性。使用RealmOptional声明可选的数字类型。

为什么数字类型使用非标准RealmOptional而不是Swift的内置可选语法?

1 个答案:

答案 0 :(得分:12)

Realm模型类自动为访问底层数据库数据的持久属性实现getter和setter。为了提供这些getter和setter,必须使用dynamic修饰符声明属性。此修饰符要求Swift通过getter和setter动态调度对属性的访问,而不是在编译时直接访问该成员。 dynamic修饰符具有显着的限制:仅支持可在Objective-C中表示的类型。这是因为Swift的动态调度建立在Objective-C运行时之上。正是这种限制阻止了Realm直接支持Int?

考虑到此限制,您可能想知道String?NSData?NSDate?是如何得到支持的。答案是它们在Objective-C中具有自然等价物,即nullable NSString *nullable NSData *nullable NSDate *。 Swift的数字类型不存在这样的等价物。