根据NSPredicate SWIFT过滤结构数组

时间:2017-10-19 17:06:45

标签: arrays swift struct filter uisearchcontroller

我有UITableViewUISearchController。我想根据NSPredicate的{​​{1}}过滤我的数据数组(名为:allGames)。

我的代码只过滤一个字符串数组,如下所示:

UISearchBar.text

我可以在这里过滤我的数组。但是如果我创建这个结构:

func updateSearchResults(for searchController: UISearchController) {

    filteredGames.removeAll(keepingCapacity: false)

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
    let array = (allGames).filtered(using: searchPredicate)

    filteredGames = array as! [String]

    self.tableView.reloadData()
}

如何根据游戏名称和类型过滤数组?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

假设allGames是一个数组[Games] - 顺便说一下结构应该以单数形式Game命名 - 我强烈建议使用原生的Swift filter功能

let searchText = searchController.searchBar.text!
let fileredGames = allGames.filter { $0.name?.range(of: searchText, options: [.caseInsensitive]) != nil 
                                  || $0.type?.range(of: searchText, options: [.caseInsensitive]) != nil }

还要考虑将结构中的typename声明为非可选。