我需要从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.count
或searchResult.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
或超出范围。