И и ИЛИ в сочетании с NSPredicate. IOS Swift

3

Динамический предикат or для моего запроса coredata get

    var predicate = [NSPredicate]()
    //this three is or
        predicate.append(NSPredicate(format: "item_parent_id = %i", 1))
        predicate.append(NSPredicate(format: "item_parent_id = %i", 3))       
        predicate.append(NSPredicate(format: "item_parent_id = %i", 5))

    // but this one is and
        predicate.append(NSPredicate(format: "price_date CONTAINS[cd] %@", 'timestamp'))

    var compound = NSCompoundPredicate.orPredicateWithSubpredicates(predicate)

первое три ограничения для оператора OR, а последнее ограничение для даты - AND

Я потратил довольно много времени на это, я новичок в быстрой разработке, и я не привык к Objective C, поэтому мне сложно перевести то, что я нашел, написанное в объективном c.

если возможно, напишите ответ быстро, любые комментарии и предложения будут большой помощью. Заранее спасибо

obj c - источник # 1
obj c - source # 2

  • 0
    Часть «ИЛИ» может быть упрощена до одного предиката NSPredicate(format: "item_parent_id IN %@", [1, 3, 5]) ...
Теги:
core-data

1 ответ

7
Лучший ответ

Если вы ищете операцию типа (a OR b OR c) AND d, вам понадобятся два составных предиката:

var orList = [NSPredicate]()
//this three is or
orList.append(NSPredicate(format: "item_parent_id = %i", 1))
orList.append(NSPredicate(format: "item_parent_id = %i", 3))       
orList.append(NSPredicate(format: "item_parent_id = %i", 5))
let orPredicate = NSCompoundPredicate.orPredicateWithSubpredicates(orList)

// but this one is and
let other = NSPredicate(format: "price_date CONTAINS[cd] %@", 'timestamp')

let compound = NSCompoundPredicate.andPredicateWithSubpredicates([orPredicate, other])
  • 1
    уау, я никогда не думал, что это было так просто, я попробую это ... спасибо, сэр

Ещё вопросы

Сообщество Overcoder
Наверх
Меню