【发布时间】:2016-01-26 06:55:50
【问题描述】:
Realm 的 documentation on optional properties 状态:
String、NSDate和NSData属性可以使用标准 Swift 语法声明为可选或非可选。可选数字类型使用RealmOptional声明。
为什么数字类型使用非标准的 RealmOptional 而不是 Swift 内置的可选语法?
【问题讨论】:
Realm 的 documentation on optional properties 状态:
String、NSDate和NSData属性可以使用标准 Swift 语法声明为可选或非可选。可选数字类型使用RealmOptional声明。
为什么数字类型使用非标准的 RealmOptional 而不是 Swift 内置的可选语法?
【问题讨论】:
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 的数值类型不存在这样的等价物。
【讨论】: