ios - 如何在数组中搜索对象?
问题描述
我创建了一个名为的对象Tool
,并将其中一些附加到我的 iOS 应用程序的数组中。现在我想搜索其中一些显示在表格视图中。如何在 中搜索特定参数Tool
?
class Tool {
var name = String()
var type = String()
var status = String()
var id = Int()
init(name: String, type: String, status: String, id: Int) {
self.name = name
self.type = type
self.status = status
self.id = id
}
}
添加项目:
//Toolbox-Filler
var tools: [Tool] = []
var searchTools: [Tool] = []
表视图:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
return searchTools.count
}else {
return tools.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifer, for: indexPath) as! ToolboxCell
if searching {
cell.descriptionLabel.text = searchTools[indexPath.row].name
cell.typeLabel.text = searchTools[indexPath.row].type
cell.statusLabel.text = searchTools[indexPath.row].status
}else {
cell.descriptionLabel.text = tools[indexPath.row].name
cell.typeLabel.text = tools[indexPath.row].type
cell.statusLabel.text = tools[indexPath.row].status
}
return cell
}
搜索项目:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchTools.append(contentsOf: tools.filter { $0.name == searchText })
searching = true
tableView.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searching = false
searchBar.text = ""
tableView.reloadData()
}
这是正确的方法吗?Xcode 在测试时显示错误。
解决方案
你的过滤器语法有点偏离。应该是这样的:
searchTools = tools.filter { $0.name == searchText }
这将为您提供字段等于当前搜索文本的所有Tool
s (文字比较)。name
或者,考虑到区分大小写和其他本地化问题:
searchTools = tools.filter { $0.name.localizedCaseInsensitiveContains(searchText) }
推荐阅读
- python - Python:sympy TypeError:无法将表达式转换为浮点数
- java - 没有明显原因的 ImageView 缩放
- node.js - Mongoose findOne 在保存后无法正常工作
- c# - C# - Azure 持久功能 - 重新启动编排
- leaflet - Unimplemented Type 4 error when styling leaflet vector tiles
- asp.net - asp net core 3中的错误找不到部分视图
- javascript - React hooks FlatList pagination
- javascript - How can i nest the start of the object
- flutter - How to make image layout inside card like this?
- asp.net-core - is there any way to detect windows environment based function in our project?