领域列表和Swift阵列

Lor*_*ssi 7 arrays realm ios swift

我想使用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
    //...
}
Run Code Online (Sandbox Code Playgroud)

据我所知,我需要List在Swift 上使用Realm Array才能建立"多对多关系".
除了计算平均值(如在代码中),我使用foo.b数组来填充tableview和一些for in循环.我还将它映射到其他数组并使用其filter()功能.

现在,我应该只使用Realm List还是应该将它映射到本机Swift阵列然后使用它(出于性能和简单性的原因)?

bda*_*ash 10

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

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

实时视图

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

效率

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

var average: Double {
    return b.average("c") as Double?
}
Run Code Online (Sandbox Code Playgroud)

这将计算Realm中基础值的平均值,而不实现Bar实例.