【问题标题】:How to search for object in Dictionary with SearchBar TableView?如何使用 SearchBar TableView 在字典中搜索对象?
【发布时间】:2018-04-16 04:23:10
【问题描述】:

我正在为 TableView 使用字典。我还有一个搜索栏,用于搜索表格中的项目。

数据存储如下:

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

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

上面有没有更好的实现方式?

【问题讨论】:

  • 如果我没记错的话,你应该对结果数组执行追加。但是您正在分配价值。 filtersNames[String(描述:boy.getName().characters.first!)] = [boy]
  • @DJ-Glock 感谢您的提示。我必须先只删除值,然后再应用追加。

标签: ios swift uitableview dictionary


【解决方案1】:

更多的代码行,但它现在可以工作了。我将字典中的 values 存储在不同的变量中并过滤了这些变量。过滤后的存储在另一个变量中,然后迭代。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多