我想使用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数组上使用Realm List来实现“to-many relationship”.
除了计算平均值(如在代码中),我使用foo.b数组来填充tableview,在一些中用于in循环.我还将它映射到其他数组并使用其filter()函数.
现在,我应该只使用领域列表还是应该将其映射到本机Swift阵列然后使用它(出于性能和简单性的原因)?
解决方法@H_502_14@
一般的建议是,如果你应该避免从List< T>转换到[T]除非有必要.有两个原因:
>列表< T>是对数据的实时视图,而不是时间点快照.
>列表< T>可以避免为许多计算实例化Ts.
实时视图
列表与LT; T>实例提供数据的实时视图,而不是时间点快照.您可以将其中一个提供给视图控制器,其内容将在应用程序的其他部分更新其包含的对象后更新.
效率
List< T>及其提供的方法可以避免在许多情况下实现T的实例.例如,您可以使用NSPredicate过滤List,而Realm不需要在内存中创建Swift对象来执行此操作.另一种情况是您的示例中的平均计算属性.它可以这样写(假设b现在是List< Bar>):
var average: Double {
return b.average("c") as Double?
}
这将计算Realm中基础值的平均值,而不实现Bar实例.
>列表< T>是对数据的实时视图,而不是时间点快照.
>列表< T>可以避免为许多计算实例化Ts.
实时视图
列表与LT; T>实例提供数据的实时视图,而不是时间点快照.您可以将其中一个提供给视图控制器,其内容将在应用程序的其他部分更新其包含的对象后更新.
效率
List< T>及其提供的方法可以避免在许多情况下实现T的实例.例如,您可以使用NSPredicate过滤List,而Realm不需要在内存中创建Swift对象来执行此操作.另一种情况是您的示例中的平均计算属性.它可以这样写(假设b现在是List< Bar>):
var average: Double { return b.average("c") as Double? }
这将计算Realm中基础值的平均值,而不实现Bar实例.