我有UITableView
和UISearchController
。我想根据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()
}
如何根据游戏名称和类型过滤数组?在此先感谢您的帮助。
答案 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 }
还要考虑将结构中的type
和name
声明为非可选。