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

bda*_*ash 4 realm swift

Realm 关于可选属性文档说明:

String,NSDateNSData属性可以使用标准Swift语法声明为可选或非可选.使用可选的数字类型声明RealmOptional.

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

bda*_*ash 12

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

鉴于此限制,您可能想知道如何String?,NSData?并且NSDate?得到支持.答案是,他们有在Objective-C,即天然等同物nullable NSString *,nullable NSData *nullable NSDate *.Swift的数字类型不存在这样的等价物.