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

时间:2017-03-20 20:08:09

标签: swift realm nspredicate

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

elements.filter { (element) -> Bool in
    return ... 
}

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

1 个答案:

答案 0 :(得分:2)

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

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

例如:

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