让我解释一下第一个原因,标题可能有点令人困惑。
假设我有一个 Movie 类型的 Realm 对象:
Movie1(id: 0, genre: "horror")
Movie2(id: 1, genre: "horror")
Movie3(id: 3, genre: "sci-fi")
我需要做的是获得每种类型的第一个(在本例中为 Movie1
和 Movie3
)
我想只使用realm
+ NSPredicate
来实现不循环,因此性能更好,但我有点卡在那里.. .
到目前为止我得到的是这样的:
Realm().objects(Movie.self).sorted(byKeyPath: id, ascending: true)
.value(forKeyPath: "@distinctUnionOfObjects.genre")
这会返回一个带有 ("horror", "sci-fi")
的数组,我真的不知道下一步应该是什么。如果我尝试做:
.filter("genre IN %@", arrayWithDistinctGenres)
它将返回我所有的对象。
可能很简单,但我不知道该怎么做。
感谢任何帮助。
最佳答案
从 Realm Swift 3.1 开始,您可以执行 let movie =realm.objects(Movie.self).sorted(by: ["id", true]).distinct(by: ["genre"])
,它将使用不同操作之前应用的排序顺序选择每种类型的第一部电影
。
关于swift - 过滤 Realm 对象以仅按属性获取一个(不同的)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54106932/