我有一个Book
类和一个ReadingSession
类,关系声明如下:
public class Book: Object {
// (…)
var readingSessions: [ReadingSession] {
return linkingObjects(ReadingSession.self, forProperty: "book")
}
}
public class ReadingSession: Object {
// (…)
dynamic var book: Book?
}
现在我想在Results
属性上使用Realm的filter()
'方法,例如sum()
和readingSessions
,但我不能,因为它'常规阵列。
所以我在我的Book
类中添加了另一个计算属性:
var sessions: Results<ReadingSession> {
let realm = try! Realm()
return realm.objects(ReadingSession).filter("book == %@", self)
}
现在,当我需要使用这些方法时,我会使用sessions
个属性,当我不使用readingSessions
数组时。
所以我的问题是:为什么第一种方法是使用Realm文档中推荐的linkingObjects()
方法?是否有理由不使用Realm的Results
将我的最新属性替换为该属性?根据我的经验,除了额外的方法之外,使用Realm的Results
通常要快得多,即使我需要一个常规数组,我也可以转换Results
。这样做有什么不利之处吗?
提前致谢,
丹尼尔
答案 0 :(得分:0)
目前,没有比你现在做的更好的方法了。使用linkingObjects
可能会更快,因为可以在内部双向导航关系,并且不需要针对完整数据集评估查询,因此它还取决于其大小。我们计划改变issue #1508中的行为。