2016-08-14 27 views
2

我实现或过滤器,我怎么能实现和搜索筛选器

,如果用户键入“NBA LA”, 此数组中的任何项目“appDel.dataFetcher?.appTitles”将被OR模式来搜索。

但是,我不知道如何实现AND模式。

即任何选择的项目必须同时

或搜索

 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) 

回答

1

你可以建立有NBA和洛杉矶在它的文本您造成并使用NSCompoundPredicate(andPredicateWithSubpredicates:)像下面断言:

let predicates = searchTerms.map { 
    return NSPredicate(format: "SELF CONTAINS[c] %@", $0) 
} 
let searchPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicates) 
let searchResult = ((appDel.dataFetcher?.appTitles)! as NSArray).filteredArrayUsingPredicate(searchPredicate) 
let mySet = Set<String>(searchResult) 

仅供参考,您可以使用componentsSeparatedByString更简单地拆分文本:

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

你有我的修复,非常感谢你:D – newBike