领域列表和 Swift 数组

Realm Lists and Swift Arrays

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

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

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

}

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

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

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

一般建议是,除非必要,否则应避免从 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?
}

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