使用UISearchBar过滤数组

时间:2017-08-03 01:02:37

标签: arrays swift uisearchbar

我目前正在使用以下代码过滤数组并在tableView中显示结果。问题是,如果搜索与确切的单词匹配,这只会返回结果。当我输入每个字符时,如何更改我的数组过滤器以搜索每个字符?

let data = ["Mango", "Grape", "Berry", "Orange", "Apple"]

var filteredData: [String] = []

filteredData = data.filter({$0 == searchBar.text})

获得"芒果"的唯一方法要显示在我的tableView中,我必须在搜索栏中输入Mango,输入" Man"没有显示任何结果。

3 个答案:

答案 0 :(得分:1)

试试这个:

filteredData  = data.filter { $0.contains(_ other: searchBar.text) }

答案 1 :(得分:0)

这肯定会帮助你:

var filteredData:[String] = []

 func searchBar(_ searchBar: UISearchBar, textDidChange searchText:String){
    filterContentForSearchText(searchText: searchText)
}

func filterContentForSearchText(searchText: String, scope: String = "All") {
    if searchText != "" {

        filterData = data.filter {name in

                                return   name.lowercased().contains(searchText.lowercased())

        }
    }else { self.filterData = self.data}
}

答案 2 :(得分:0)

Swift 5解决方案:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    filteredData = data

    if searchText.isEmpty == false {
        filteredData = data.filter({ $0.contains(searchText) })
    }

    tableView.reloadData()
}

这可以确保当searchBar为空时,它可以返回显示所有数组的数据,同时还可以在每次更改文本时重新加载tableView。