【问题标题】:Why does Realm use RealmOptional<Int> rather than Int? for optional properties?为什么 Realm 使用 RealmOptional<Int> 而不是 Int?对于可选属性?
【发布时间】:2016-01-26 06:55:50
【问题描述】:

Realm 的 documentation on optional properties 状态:

StringNSDateNSData 属性可以使用标准 Swift 语法声明为可选或非可选。可选数字类型使用RealmOptional 声明。

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

【问题讨论】:

    标签: swift realm


    【解决方案1】:

    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 的数值类型不存在这样的等价物。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 2011-09-07
      • 1970-01-01
      • 2019-02-28
      • 2019-02-08
      • 2011-07-01
      • 2020-05-30
      • 1970-01-01
      相关资源
      最近更新 更多