realm.objects().filter 不适用于结果<T>

realm.objects().filter does not work with Resuts<T>

我尝试使用 RealmSwift framefowk 和谓词从 Realm 查询对象:

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

错误是:

Cannot invoke 'filter' with an argument list of type '(String, Results)'

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

我做错了什么?

在你的情况下,结果并不像数组那样考虑,你可以用这段代码简单地做到这一点。您是否尝试过将 realm.objects(Route) 映射到 return 标识符数组并使用如下内容对其进行过滤:ANY route.yourIdentifier IN %@ ?

我写了这个扩展

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文档无法直接创建结果

问题是 Results.filter(_:...) 采用 (String, CVarArgType...) 类型的参数,但 Results 不符合 CVarArgType。我刚刚创建了 GitHub 问题 #1995 来跟踪这个。修复非常简单,我希望尽快发布 PR 来解决这个问题。

同时,您可以使用 map(_:_:)ResultsList 参数转换为 Results.filter(_:...)Array,如下所示:

realm.objects(Train).filter("ANY route IN %@", map(realm.objects(Route)) { [=10=] })

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