为什么Realm使用RealmOptional 而不是Int?为可选属性?
问题描述:
领域的documentation on optional properties状态:为什么Realm使用RealmOptional <Int>而不是Int?为可选属性?
String
,NSDate
和NSData
属性可以被声明为可选的或非可选使用标准斯威夫特语法。可选的数字类型使用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的数字类型不存在这样的等价物。