如何使用SearchBar TableView在Dictionary中搜索对象?

时间:2017-11-03 12:22:24

标签: ios swift uitableview dictionary

我正在使用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()
}

问题:当我搜索某个项目时,我现在只获得一条记录。

上面有更好的方法吗?

1 个答案:

答案 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()
}