我有一个 UITableView
和一个 UISearchController
。我想根据 UISearchBar.text
的 NSPredicate
过滤我的数据数组(名为:allGames)。
我的代码只过滤这样一个字符串数组:
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()
}
在这里我可以过滤我的数组。但是如果我创建这个结构:
struct Games {
var name: String?
var type: String?
var image: UIImage?
}
如何根据游戏名称和类型过滤数组?预先感谢您的帮助。
最佳答案
假设 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
声明为非可选。
关于arrays - 根据 NSPredicate SWIFT 过滤结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46835285/