Формат NSPredicate для проверки массива 2 и фильтрации этих массивов - PullRequest
1 голос
/ 09 апреля 2020

У меня есть один массив с именем A, и у меня есть один список результатов области с именем B. Теперь мне нужно отфильтровать мой B на основе значений, содержащихся в A. Таким образом, мой B будет иметь только объект значений, который содержит A.

Вот мой код:

var peopleObjectId: [String] = ["1", "2", "4", "6"]
var list  = Results<userData>

Мой список содержит все объекты о пользователе. Теперь с помощью фильтра ниже. Я должен заполнить мой список значений, который мой peopleObjectId содержит

list = list.filter(NSPredicate(format: "peopleID CONTAINS %@", peopleObjectId))

Я знаю, что не должен использовать peopleObjectId напрямую. Не уверен, как мне этого добиться.

Любая помощь будет полезна.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Иногда проще - лучше, и, по-видимому, в NSPredicate нет необходимости.

Кроме того, запуск фильтра с использованием функций Swift не возвращает объект Realm Results, он возвращает LazyFilterSequence, который не является Коллекция Realm. Таким образом, эти объекты не могут быть обнаружены и теряют часть своего Царства.

Если у вас есть куча собак, хранящихся в царстве, и вы хотите получить определенные c собак, вот решение, которое возвращает результаты царства объект

var listOfDogsToFind = ["Fido", "Dino", "Sport"]
var results = realm.objects(DogClass.self).filter("dog_name IN %@", listOfDogsToFind)
0 голосов
/ 09 апреля 2020

Вы можете использовать ключевое слово IN:

IN

Левое выражение должно появляться в наборе, указанном правым выражением. то есть имя IN {'Milk', 'Eggs', 'Bread'}

Ref: NSP Предикатная таблица

let found = list.filter { (user) in
    NSPredicate(format: "SELF IN %@", peopleObjectId)
        .evaluate(with:user.peopleID)
}

Подробнее о чтении NSPredicate:

...