如何编写Realm Results对象扩展



我想写一个扩展,简化对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")
    }
}

最新更新