我想写一个扩展,简化了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
约束是不够的。
我怎样才能完成我想要做的事情?
答案 0 :(得分:2)
我认为这里的问题不是通用约束,但是你在这里使用的两个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")
}
}