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

问题描述:

领域的documentation on optional properties状态:为什么Realm使用RealmOptional <Int>而不是Int?为可选属性?

StringNSDateNSData属性可以被声明为可选的或非可选使用标准斯威夫特语法。可选的数字类型使用RealmOptional来声明。

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

领域模型类自动实现访问底层数据库数据的持久性属性的getter和setter。为了提供这些getter和setter,必须使用dynamic修饰符声明您的属性。这个修饰符让Swift通过getters和setter动态地分配对属性的访问,而不是在编译时直接访问成员。 dynamic修饰符带有一个重要限制:它仅支持可在Objective-C中表示的类型。这是因为Swift的动态调度是建立在Objective-C运行时的基础之上的。正是这个限制可以防止Realm直接支持Int?

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