如何不执行.count从结果中逐个获取对象

时间:2019-04-27 12:17:02

标签: swift realm

我需要从Realm Results中获取20个以下的对象。数据库可能很沉重,因此Results.count是长时间调用。

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

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

所以,这个不起作用:

style="margin-bottom: -9px; backgroundImage:new 0 0 1920 140;"

如果我尝试使用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,则会增加很多时间,尤其是在旧设备上。这就是为什么我要避免它。

2 个答案:

答案 0 :(得分:0)

您可以使用prefix(maxLenght:Int)方法获取具有指定maxLenght的子集合。 示例:

realm.objects(ObjectModel.self).prefix(20).count

答案 1 :(得分:0)

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

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或超出范围访问结果。