【问题标题】:Ignored properties and simple swift properties忽略的属性和简单的 swift 属性
【发布时间】:2017-08-21 09:46:05
【问题描述】:

使用忽略的属性和只使用简单的 swift 属性在行为上有什么区别?

我需要向不应保存到数据库的领域对象添加属性。 Realm 提供“忽略的属性”,但如果我只是用普通的 swift 样式编写属性,它不应该保存到数据库中。行为有区别吗?

// Ignored propery
class Person: Object {
  dynamic var tmpID = 0

  override static func ignoredProperties() -> [String] {
    return ["tmpID"]
  }
}


// Normal swift property
class Person: Object {
      var tmpID = 0 // Realm supported class but with no dynamic
      var myClassObj = MyCustomClass() // Class realm does not support
 }

【问题讨论】:

    标签: ios swift properties realm


    【解决方案1】:

    由于 Realm 框架中使用的 Objective-C 运行时,必须将 Realm 模型中的 var 属性标记为 dynamic。如果您不将属性标记为dynamic,它们将不会在运行时更新。

    但是,ignoredProperties 是一个完全独立的东西。通过向ignoredProperties 添加一个属性,您告诉Realm 不要将该属性保存在数据库中。如果您没有将属性标记为dynamic,也没有将其添加到ignoredProperties,它仍然会被持久化到Realm,但它不会按预期工作。

    如果您需要在 Realm 模型类中存储不持久化的属性,则必须将它们添加到 ignoredProperties

    【讨论】:

      【解决方案2】:

      使用 Realm 方式并使用 ignoredProperties 可能还有其他原因,但我看到的一个问题如下。

      Realm 是一个 C++ 项目,上面是一个 Objective-C 层,其之上是 Swift 层。我认为有一天可能会删除 Objective-C 层。 如果在那一天之后升级数据库,所有简单的 swift 属性都将成为数据库条目,因为dynamic 告诉编译器使用 Objective-C 动态调度。如果他们放弃 Objective-C 层,dynamic 将不再需要。所以请保存并使用ignoredProperties

      【讨论】:

        【解决方案3】:

        您似乎将ignoredProperties 与这两件事进行比较

        • 没有dynamic 的快速属性
        • Realm 不支持的类型的属性

        对于第一种,Realm 似乎仍然将这些存储在数据库中。

        class MyObject: Object {
            dynamic var string = ""
            var normalString = ""
        }
        

        还有数据库:

        这是因为dynamic 只是告诉 swift 在 Objective-C 运行时使用动态调度的一种方式,它允许在运行时动态更新属性。

        对于第二种,Realm 似乎忽略了您不是 Realm Objects 的自定义类。

        【讨论】:

        • 虽然这是公认的答案,但我在 Swift 4、Realm 3 中没有看到这种行为。如果将 Realm 类属性指定为 var,如答案所示,Realm 似乎不会在 Realm 中持久化(存储)它。另请注意,对于 Swift 4,Realm 属性需要定义为 @objc dynamic var
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-11
        • 2023-03-19
        • 2021-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多