我正在尝试过滤并返回searchDosplayController的以下对象数组。
var family = [Family]()// fetchedFamily
var filteredFamily: [Family]! // filter fetched events
这就是我过滤它的方式:
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = searchController.searchBar.text
self.filteredProvince = provinces
if !searchText.isEmpty {
let searchPredicate = NSPredicate(format: "name CONTAINS[c] %@", searchText)
let array = (filteredProvince as NSArray).filteredArrayUsingPredicate(searchPredicate)
filteredProvince = array as! [Province]
}
然而,当我搜索时,没有任何东西被归还。我试着这样做:
filteredFamily = searchText.isEmpty ? family : family.filter({(dataString: String) -> Bool in
return dataString.rangeOfString(searchText, options: .CaseInsensitiveSearch) != nil
})
但是,我收到以下错误:' Family不是String'的子类型。有没有更好的方法来过滤家庭?因为,过滤后的结果必须发送回searchDisplayController。
提前致谢。
答案 0 :(得分:1)
所以我们有一个Family
类看起来像这样吗?
class Family {
let name : String
init(name:String) {
self.name = name
}
}
然后我们有一个families
的列表:
var families = [Family]()
我们想要提取name
属性包含给定文本的所有系列。
let searchText = "something here"
好,首先我们将此扩展名添加到String struct
。
extension String {
func contains(find: String) -> Bool {
return self.rangeOfString(find) != nil
}
}
最后我们可以过滤家庭写作:
let filtered = families.filter { $0.name.contains(searchText) }
希望这有帮助。