我正在使用TableView的Dictionary。我还有一个搜索栏,用于搜索表格中的项目。
数据存储如下:
var namesDic = [String: [Name]]()
我将其搜索为:
func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text! == "" {
filteredNames = namesDic
} else {
filteredNames.removeAll()
for persons in namesDic {
let person = persons.value.filter { $0.getName().contains(searchController.searchBar.text!)
}
for boy in person {
filteredNames[String(describing: boy.getName().characters.first!)] = [boy]
}
}
}
self.tableView.reloadData()
}
问题:当我搜索某个项目时,我现在只获得一条记录。
上面有更好的方法吗?
答案 0 :(得分:1)
更多代码行,但它现在正在运行。我将字典中的值存储在不同的变量中并对其进行过滤。过滤后的值存储在另一个变量中,然后迭代。
func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text! == "" {
filteredNames = namesDic
} else {
filteredNames.removeAll()
var namesArray = [Name]()
for (_, value) in namesDic {
namesArray += value
}
let namesFilteredArray = namesArray.filter { $0.getName().lowercased().contains(searchController.searchBar.text!.lowercased())
}
for filteredName in namesFilteredArray {
if let letter = filteredName.getName().characters.first {
if filteredNames[String(letter)] != nil {
filteredNames[String(letter)]?.append(filteredName)
} else {
filteredNames[String(letter)] = [filteredName]
}
}
}
}
self.tableView.reloadData()
}