Nic*_*rbo 2 arrays filtering nspredicate swift
我有一系列的工作室.每个工作室都有一个名为studioName的属性.
我需要我的搜索字段来过滤工作室,基于studioName,由用户应用于搜索字段.
这是我目前的代码:
var studios = [Studio]()
var filteredStudios = [Studio]()
var studiosToDisplay = [Studio]()
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = searchController.searchBar.text
print("SEARCH TEXT: \(searchText)")
if searchText == nil || searchText!.isEmpty {
studiosToDisplay = studios
self.resultTableView.reloadData()
NSNotificationCenter.defaultCenter().postNotificationName("showResultsBeforeSearchingNotification", object: nil) //Calls SearchVC
} else {
studiosToDisplay.removeAll()
let searchPredicate = NSPredicate(format: "studioName CONTAINS[c] %@", searchText!)
let array = (self.studios as NSArray).filteredArrayUsingPredicate(searchPredicate)
studiosToDisplay = array as! [Studio]
self.resultTableView.reloadData()
}
}
Run Code Online (Sandbox Code Playgroud)
它现在只是没有工作..它过滤了,但无论我放在搜索域中,我每次都会留下同样的工作室.
我想我需要知道谓词,每次都必须查看数组中的单个对象.但我无法弄清楚如何.我尝试在格式中添加"ANY",但这会导致我的应用崩溃.
这不必要地复杂.这里没有必要NSPredicate.
var studios = [Studio]()
var filteredStudios = [Studio]()
var studiosToDisplay = [Studio]()
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = searchController.searchBar.text
print("SEARCH TEXT: \(searchText)")
if let searchText = searchText, !searchText.isEmpty {
studiosToDisplay = studios.filter{ $0.studioName.contains(searchText) }
}
else {
studiosToDisplay = studios
NSNotificationCenter.defaultCenter().postNotificationName("showResultsBeforeSearchingNotification", object: nil) //Calls SearchVC
}
self.resultTableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)