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(_:_:)
将 Results
和 List
参数转换为 Results.filter(_:...)
到 Array
,如下所示:
realm.objects(Train).filter("ANY route IN %@", map(realm.objects(Route)) { [=10=] })
编辑: PR #1996 使 Results
符合 CVarArgType
现在正在等待审查。
我尝试使用 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(_:_:)
将 Results
和 List
参数转换为 Results.filter(_:...)
到 Array
,如下所示:
realm.objects(Train).filter("ANY route IN %@", map(realm.objects(Route)) { [=10=] })
编辑: PR #1996 使 Results
符合 CVarArgType
现在正在等待审查。