Создать сложный NSCompoundPredicate в Swift 3

Я хочу создать сложный NSCompoundPredicate в Swift 3, однако я не знаю, как это сделать.

Предположим, у меня есть 5 предикатов (p1,p2,p3,p4,p5). Я хочу реализовать следующие условия:

compound1 = (p1 AND p2 AND p3) // NSCompoundPredicate(type: .and, 
                              //subpredicates: predicates)
compound2 = (p4 AND p5) // NSCompoundPredicate(type: .and, 
                       //subpredicates: predicates)
compound3 = (compound1 OR compound2) // problem is here

fetchRequest.predicate = compound3

NSCompoundPredicate в качестве второго аргумента получает массив NSPredicates, который ему не нужен. Какое лучшее решение?

1 ответ

Решение

NSCompoundPredicate наследуется от NSPredicateпоэтому вы можете передать составные предикаты, созданные на первых этапах, как субпредикаты другому составному предикату:

let compound1 = NSCompoundPredicate(type: .and, subpredicates: [p1, p2, p3])
let compound2 = NSCompoundPredicate(type: .and, subpredicates: [p4, p5])
let compound3 = NSCompoundPredicate(type: .or, subpredicates: [compound1, compound2])

fetchRequest.predicate = compound3
Другие вопросы по тегам