我正试图限制Realm查询的结果。如果我有一百万条记录,并且我调用了Swift prefix
函数,它会触及所有一百万条记录吗?
这就是我想要做的:
let objects = realm.objects(BookRealmObject.self)
.sorted(byKeyPath: "createdAt", ascending: false)
let items: [BookType] = {
guard let limit = request.limit, limit > 0 else {
return objects.map { Book(from: $0) }
}
return objects.prefix(limit).map { Book(from: $0) }
}()
从prefix
返回的类型为Slice<Results<Element>>
。不管调用方是否请求了限制,我都需要将其转换为普通对象以传递给不同的线程。
这是处理此问题的正确方法,还是有一种更优化,更简洁的方法来做到这一点?
答案 0 :(得分:2)
我们在docs中可以找到:
由于Realm中的查询是惰性的,因此根本不需要执行这种分页行为,因为Realm仅在明确访问对象后才从查询结果中加载对象。
因此,当您获得对象的前缀时,它仍然应该是惰性的,但是当您使用map
访问对象时,则会失去惰性的功能。