我想使用 Realm 来持久化数据,因为它似乎比 Core Data 更容易学习和使用。
然而,有些方面我仍然不清楚,其中之一是 Realm 列表的使用。
例如我现在有这样的东西:
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
数组来填充 tableview 和一些 for in
循环。我还将它映射到其他数组并使用它的 filter()
函数。
现在,我应该只使用 Realm List
还是应该将其映射到原生 Swift Array 然后改用它(出于性能和简单性原因)?
最佳答案
一般的建议是,如果你应该避免从 List<T>
转换至 [T]
除非有必要。这有两个原因:
-
List<T>
是数据的实时 View ,而不是时间点快照。 -
List<T>
可以避免实例化T
s 用于许多计算。
实时取景
List<T>
实例提供对数据的实时 View 而不是时间点快照。您可以将一个交给 View Controller ,它的内容将在应用程序的其他部分更新它包含的对象后更新。
效率
List<T>
,以及它提供的方法,可以避免实例化 T
的实例。在许多情况下。例如,您可以过滤 List
使用 NSPredicate
并且 Realm 不需要在内存中创建 Swift 对象来这样做。另一种情况是 average
您的示例中的计算属性。它可以这样写(假设 b
现在是 List<Bar>
):
var average: Double {
return b.average("c") as Double?
}
这将在不实现 Bar
的情况下计算 Realm 中基础值的平均值实例。
关于ios - Realm 列表和 Swift 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33743734/