newBike newBike - 3 months ago 9
Swift Question

How could I implement AND search filter

I implements OR filter,

if user types "NBA LA",
Any item in this array "appDel.dataFetcher?.appTitles" will be searched with OR mode.

However, I don't know how to implement AND mode.

That is any selected item must have NBA and LA in its text at the same time

OR SEARCH



let searchTerms = searchController.searchBar.text!.characters.split{$0 == " "}.map(String.init)
for term: String in searchTerms {
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", term)
let array = ((appDel.dataFetcher?.appTitles)! as NSArray).filteredArrayUsingPredicate(searchPredicate)
searchResult += array as! [String]
}
let mySet = Set<String>(searchResult)

Answer

You can build up your resulting AND predicate using NSCompoundPredicate(andPredicateWithSubpredicates:) like below:

let predicates = searchTerms.map {
  return NSPredicate(format: "SELF CONTAINS[c] %@", $0)
}

let predicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicates)

FYI, you can also split your text much more easier using componentsSeparatedByString:

let searchTerms = searchController.searchBar.text!.componentsSeparatedByString(" ")