如何在2D数组中使用滤镜

时间:2017-01-14 08:29:56

标签: swift swift3

我在Swift中有一个2D数组。

let Name:[[String]] =[["India", "PA"], ["Africa", "SA"]]

我正在尝试在iOS应用中实现搜索栏并尝试过滤此2D数组。

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String, indexPath: IndexPath) {

    filteredArray = Name.filter ({(names: String) -> Bool in
        return names.lowercased().range(of: searchText.lowercased()) != nil
    })

    if searchText = ""
    {
        shouldShowSearchResult = true
        self.tableView.reloadData()
    }
    else
    {
        shouldShowSearchResult = false
        self.tableView.reloadData()
    }

但是我收到了编译错误:

  

无法转换类型(String)的值 - >布尔对预期的争论   type'([String]) - >布尔“

1 个答案:

答案 0 :(得分:0)

最小,完整且可验证的示例

首先,您应该始终发布Minimal, Complete, and Verifiable example

所以问题确实变成了

  

给出像这样的数组

let data  = [["India", "PA"], ["Africa", "SA"]]
  

并给出一个像这样的关键字

let keyword = "ind"

如何只检索包含关键字?

的元素(子数组)

解决方案

答案是

let lowercasedKeyword = keyword.lowercased()
let filtered = data.filter {
    $0[0].lowercased().range(of: lowercasedKeyword) != nil
    || $0[1].lowercased().range(of: lowercasedKeyword) != nil }

考虑

使用数组和数组作为模型是一个非常危险的设计选择。 你为什么不创建这样的模型?

struct Country {
    let name: String
    let code: String
}

然后构建你的数组,如下所示?

let countries = [Country(name: "India", code: "PA"), Country(name: "Africa", code: "SA")]