realm.objects()。过滤器不适用于Resuts <t>

时间:2015-05-19 09:20:02

标签: swift realm

我尝试使用带有谓词的RealmSwift framefowk从Realm执行查询对象:

realm.objects(Train).filter("ANY route IN %@", realm.objects(Route))

错误是:

  

无法使用类型'的参数列表调用'filter'(String,   结果)'

相同的代码适用于Realm framework,但不适用于RealmSwift framework

我做错了什么?

3 个答案:

答案 0 :(得分:1)

问题是Results.filter(_:...)接受(String, CVarArgType...)类型的参数,但Results不符合CVarArgType。我刚刚创建了GitHub问题#1995来跟踪此问题。修复非常简单,我希望很快就能解决这个问题。

在此期间,您可以使用ResultsListResults.filter(_:...)参数转换为Arraymap(_:_:),如下所示:

realm.objects(Train).filter("ANY route IN %@", map(realm.objects(Route)) { $0 })

编辑: PR #1996使Results符合CVarArgType现在正在等待审核。

答案 1 :(得分:0)

在您的情况下,结果并不像数组一样考虑,您只需使用这段代码即可。您是否尝试映射realm.objects(Route)以返回一个标识符数组并使用以下内容对其进行过滤:ANY route.yourIdentifier IN %@

答案 2 :(得分:0)

我写了这个扩展名

extension Results {
   func map<U>(transform: (T) -> U) -> Results<U> {
       return Results<U>(Swift.map(self, transform))
   }
}

但错误是

'Results<U>' cannot be constructed because it has no accessible initializers

可能是因为无法直接针对Realm文档创建结果。