领域:谓词返回LazyFilterCollection - 如何转换为Results <T>?

swa*_*ner 6 realm nspredicate swift

我正在使用NSPredicates直接在数据库上过滤我的数据库查询,但随后我想进一步Results<T>使用自定义谓词过滤返回的值():

elements.filter { (element) -> Bool in
    return ... 
}
Run Code Online (Sandbox Code Playgroud)

这个返回一个LazyFilterBidirectionalCollection- 如何使用它并再次获得结果?

bda*_*ash 2

我们正在跟踪在GitHub 问题 #2138中添加对基于块的谓词的支持。这将允许您在 Realm 内置原语支持的范围之外执行自定义过滤。

如果您需要有时使用 aResults<T>而有时使用 a,LazyFilterBidirectionalCollection则可以将值包装在类型擦除的包装器中,例如AnyBidirectionalCollection<T>,它将任何操作转发到包装的类型,同时隐藏底层集合。

例如:

func maybeFilter(results: Results<Foo>) -> AnyBidirectionalCollection<Foo> {
    if (condition) {
        return AnyBidirectionalCollection(results.filter { $0.foo != "bar" })
    }
    return AnyBidirectionalCollection(results)
}
Run Code Online (Sandbox Code Playgroud)