arrays - 根据 NSPredicate SWIFT 过滤结构数组

标签 arrays swift struct filter uisearchcontroller

我有一个 UITableView 和一个 UISearchController。我想根据 UISearchBar.textNSPredicate 过滤我的数据数组(名为: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 }

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

关于arrays - 根据 NSPredicate SWIFT 过滤结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46835285/

相关文章:

c++ - 在 C++ 中将数据添加到 struct addrinfo

c - 我的时间表计划中的任何建议

php - 错误 : [] operator not supported for strings

javascript - 在 Json 中填充子对象

objective-c - 将 NSTabViewItem 的副本从 NSTabView 添加到同一个 NSTabView

swift - 在数组中找到 kindOf 类并在 Swift 中替换它的最简单方法是什么?

c - 将链表写入二进制文件(C)

javascript - 将多个数组的值组合成字符串

javascript - array.split ("stop here") array to array of arrays in javascript 数组

ios - 从模块接口(interface)构建模块失败;它可能已损坏或在生成时触发了 Swift 编译器中的错误