Slice<Results> 是否仍然在 Realm 中延迟加载?

Is Slice<Results> still lazy loaded in 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: [=11=]) }
    }

    return objects.prefix(limit).map { Book(from: [=11=]) }
}()

prefix 返回的类型是 Slice<Results<Element>>。无论调用者是否请求限制,我都需要将其转换为普通对象以传递给不同的线程。

这是处理这个问题的正确方法,还是有更优化、更简洁的方法来处理这个问题?

我们可以在 docs 中找到:

Since queries in Realm are lazy, performing this sort of paginating behavior isn’t necessary at all, as Realm will only load objects from the results of the query once they are explicitly accessed.

所以,当你得到对象的前缀时它仍然应该是惰性的,但是当你使用 map 访问对象时你失去了惰性特征。