Slice <results>是否仍懒加载到Realm中?

时间:2019-05-28 11:10:51

标签: arrays swift realm

我正试图限制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>>。不管调用方是否请求了限制,我都需要将其转换为普通对象以传递给不同的线程。

这是处理此问题的正确方法,还是有一种更优化,更简洁的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

我们在docs中可以找到:

  

由于Realm中的查询是惰性的,因此根本不需要执行这种分页行为,因为Realm仅在明确访问对象后才从查询结果中加载对象。

因此,当您获得对象的前缀时,它仍然应该是惰性的,但是当您使用map访问对象时,则会失去惰性的功能。