我想写一个扩展,简化对Results
对象的复杂过滤。我试过这个:
extension Results where T:MyProtocol {
func filterEnabled() -> MyProtocol {
return self.filter("type == 1").filter { $0.enabled == true }
}
}
XCode给了我这个错误:Ambiguous reference to member 'filter'
。我认为T:MyProtocol
约束是不够的。
我如何才能完成我想要做的事情?
我认为这里的问题不在于泛型约束,而是您在这里使用的两个filter
方法都返回了一个集合,该集合与您指定的返回类型不匹配。
同样需要注意的是:Realm可以对您应用的第一个过滤器进行内部优化,以查询您的数据库,后者是Swift标准库的一部分,在过滤之前,它会先将所有对象拉入内存。
extension Results where T: Named {
func firstEnabled() -> Named? {
return self.filter("type == 1 && enabled == true").first
}
func filterEnabled() -> Results<T> {
return self.filter("type == 1 && enabled == true")
}
}