【问题标题】:Realm Lists and Swift Arrays领域列表和 Swift 数组
【发布时间】:2015-11-16 20:08:59
【问题描述】:

我想使用 Realm 来持久化数据,因为它似乎比 Core Data 更容易学习和使用。
然而,有些方面我仍然不清楚,其中之一是使用领域列表

例如我现在有这样的东西:

class Foo {
    var a: String
    var b: [Bar]
    var average: Double {
        return Double(b.reduce(0.0, combine: {$0 + $1.c})) / Double(b.count);
    }
    //...

}

class Bar {
    var c: Float
    var d: NSDate
    //...
}

据我了解,我需要在 Swift Array 上使用 Realm List 才能建立“多对多关系”。
除了计算平均值(如代码中所示)之外,我还使用foo.b 数组来填充表格视图和一些for in 循环。我还将它映射到其他数组并使用它的filter() 函数。

现在,我应该只使用 Realm List 还是应该将其映射到原生 Swift 数组,然后改用它(出于性能和简单性的原因)?

【问题讨论】:

    标签: ios arrays swift realm


    【解决方案1】:

    一般建议是,除非必要,否则应避免从 List<T> 转换为 [T]。这有两个原因:

    1. List<T> 是数据的实时视图,而不是时间点快照。
    2. List<T> 可以避免为许多计算实例化 Ts。

    实时取景

    List<T> 实例提供数据的实时视图,而不是时间点快照。您可以将一个交给视图控制器,它的内容将在您的应用程序的其他部分更新它包含的对象后更新。

    效率

    List<T> 及其提供的方法可以避免在许多情况下实现T 的实例。例如,您可以使用NSPredicate 过滤List,Realm 不需要在内存中创建 Swift 对象来执行此操作。另一种情况是您的示例中的 average 计算属性。可以这样写(假设b 现在是List<Bar>):

    var average: Double {
        return b.average("c") as Double?
    }
    

    这将计算领域中基础值的平均值,而不会具体化 Bar 实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多