Swiftにおいて検索条件を記述する場合、NSPredicateを使います。
NSPredicateを複数使った複雑な条件を記述する場合、NSCompoundPredicateを使ってNSPredicateを連結するのですが、注意点が必要です。
NSPredicateのinitializerの返り値はNSPredicate?
とOptional型なのですが、NSCompoundPredicateのinitializerに渡すsubpredicatesは[NSPredicate?]
ではなく、[NSPredicate]
です。
そこで、例えば以下のように記述する必要があります。
let predicate = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType , subpredicates: [ NSPredicate(format: "userId CONTAINS %@", searchText)!, NSPredicate(format: "name CONTAINS %@", searchText)!, ])
追記(’15/6/4)
Swift 1.2においては上記対応は必要ありません。参照、Swift 1.2への移行とNSPredicate | Hack。
参考
ios – NSCompoundPredicate error in Xcode 6.1 – Stack Overflow