使用UISearchResultsUpdating过滤tableview

时间:2016-10-27 19:18:44

标签: swift uitableview uisearchbar

我有一个非常大的数据数组,我使用搜索栏进行过滤。但是我想只过滤用户在搜索栏中输入的内容。即如果你打字" b"你只能得到以b开头的物品。该列表超过200,000项,所以即使输入了许多字母,结果显示通常也无关紧要。我已经尝试了很多搜索,但我发现的每一个指南都是我所拥有的变体:

extension MapTableController : UISearchResultsUpdating {
    func filterContentForSearchText(_ searchText: String) {
            if(searchText == "") {
                matchingItems = []
            }

            else {
                matchingItems = arrayOfFixes.filter { fix in
                    return fix.lowercased().contains(searchText.lowercased())
                }
                tableView.reloadData()
            }
    }

    func updateSearchResults(for searchController: UISearchController) {
        let searchText = searchController.searchBar.text
        filterContentForSearchText(searchText!)
        self.tableView.reloadData()
    }
}

我明白使用"包含"会产生上述影响。但我无法弄清楚如何以理想的方式过滤它。例如,我希望如果我进入" Ben"它会显示像" Bendi"," Benhu"," Benji"不是这样,它显示的结果像" Juben"," Ibeno"等等,你得到了图片。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用' hasPrefix'而不是'包含'对于您的过滤器:

return fix.lowercased().hasPrefix(searchText.lowercased())