我想通过searchBar过滤一系列结构。我知道如何过滤字符串数组,但不幸的是我无法在结构数组上应用它。这是我已经做过的事情:
var BaseArray: [dataStruct] = []
var filteredArray: [dataStruct] = []
BaseArray是一个包含多个变量的Structs数组。我的目标是过滤所有变量。有什么想法吗?
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text == nil || searchBar.text == ""{
isSearching = false
view.endEditing(true)
tableView.reloadData()
}
else{
isSearching = true
filteredArray = BaseArray.filter { $0.name == searchText }
tableView.reloadData()
}
}
答案 0 :(得分:2)
您需要使用OR
/ union
运算符将积极结果合并到过滤后的数组中:||
所以你的过滤器功能将如下所示:
filteredArray = BaseArray.filter {
$0.name == searchText
|| $0.anotherProperty == searchText
|| $0.yetAnotherProperty == searchText
}
这样,如果name
或anotherProperty
或yetAnotherProperty
等于您要搜索的文字,则会列出结果。
此外,您可能希望根据包含下一个的输入文本进行过滤,而不需要与示例中的完全相同。在这种情况下,您的过滤器功能将变为:
filteredArray = BaseArray.filter {
$0.name.contains(searchText)
|| $0.anotherProperty.contains(searchText)
|| $0.yetAnotherProperty.contains(searchText)
}