我需要从Realm结果中获取20个对象或更少。数据库可能很繁重,因此Results.count是很长的调用时间。

因此,我需要的是从结果中逐个获取对象,直到获得20或最后一个对象。

但是,当我尝试在最后一个对象之后获取索引时,它将引发Realm异常“索引x超出范围(必须小于x)”。

因此,这是行不通的:

let searchResult = Ticket().get(filter: "base == nil && deleted == 0 AND orderPaidAt > 0 AND (\(query))").sorted(byKeyPath: "orderPaidAt")

for i in 0..<20 {
    if let ticket = searchResult[i] as? Ticket {
        ...
    } else {
        break
    }
}


如果我尝试使用searchResult.countsearchResult.endIndex,则会增加很多时间,尤其是在旧设备上。这就是为什么我要避免它。

最佳答案

结果是延迟加载的,因此您可以一个一个地循环遍历结果,直到结束,或者直到达到自定义计数为止:

let searchResult = Ticket().get(filter: "base == nil && deleted == 0 AND orderPaidAt > 0 AND (\(query))").sorted(byKeyPath: "orderPaidAt")
var count = 0
for thisTicket in searchResult {
   // do something
   count += 1
   if count > 20 { break }
}


这样,您仅加载所需的值,而不会调用count或超出范围。

10-07 19:21
查看更多