область.объекты().фильтр не работает с результатов


Я попытался сделать запрос объектов из области, используя RealmSwift framefowk с предикатами:

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

Ошибка:

Невозможно вызвать 'filter' со списком аргументов типа ' (String, Результаты) '

Тот же код работал с Realm framework, но не работает с RealmSwift framework.

Что я делаю не так ?

3 3

3 ответа:

Проблема в том, что Results.filter(_:...) принимает аргументы типа (String, CVarArgType...), но Results не соответствует CVarArgType. Я только что создал выпуск GitHub#1995 чтобы отследить это. Исправление довольно простое, и я надеюсь, что скоро появится пиар, чтобы решить эту проблему.

В то же время, вы можете преобразовать Results и List аргументы в Results.filter(_:...) в Array, используя map(_:_:) примерно так:

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

Редактировать: пр #1996 делая Results соответствует CVarArgType теперь ожидает рассмотрения.

Результаты не рассматриваются как массив в вашем случае, вы можете сделать это просто с помощью этого куска кода. Вы пробовали сопоставить realm.objects(Route), чтобы вернуть массив идентификатора и отфильтровать его с помощью чего-то вроде : 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

Может быть потому, что результаты не могут быть созданы непосредственно как документы области.