我将 searchBar 放在 tableView 内,然后将JSON解析为tableView,搜索工作正常,但是我想搜索多个对象。此代码适用于最新过滤的RequestBody。我要搜索requestTitle and RequestBody
。
如何解决此问题? `
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text == nil || searchBar.text == "" {
inSearchMode = false
tableView.reloadData()
view.endEditing(true)
} else {
inSearchMode = true
_ = searchBar.text!.lowercased()
filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
return pdv.pdvRequestTitle.lowercased().contains(searchText.lowercased())
})
filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
return pdv.pdvRequestBody.lowercased().contains(searchText.lowercased())
})
self.tableView.reloadData()
}
}//END
`
答案 0 :(得分:1)
您可以尝试使用||
在其中任何一个中搜索文本,或者使用&&
在二者中搜索内容
filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
return pdv.pdvRequestTitle.lowercased().contains(searchText.lowercased()) && pdv.pdvRequestBody.lowercased().contains(searchText.lowercased())
})
答案 1 :(得分:1)
由于您的搜索政策完全不清楚,因此这里有两个选择。
如果搜索词在正文中的标题 AND 中必须同时两者,则应如下所示:
let lowercaseTerm = searchText.lowercased()
filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
return pdv.pdvRequestTitle.lowercased().contains(lowercaseTerm) && pdv.pdvRequestBody.lowercased().contains(lowercaseTerm)
})
如果搜索词应在正文中的标题 OR 中为 之一,则将是解决方案:
let lowercaseTerm = searchText.lowercased()
filteredRequest = pdvRequest.filter({ (pdv: PdvRequest) -> Bool in
return pdv.pdvRequestTitle.lowercased().contains(lowercaseTerm) || pdv.pdvRequestBody.lowercased().contains(lowercaseTerm)
})