首页 > 解决方案 > 如何在数组中搜索对象?

问题描述

我创建了一个名为的对象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 在测试时显示错误。

标签: iosarraysswift

解决方案


你的过滤器语法有点偏离。应该是这样的:

searchTools = tools.filter { $0.name == searchText }

这将为您提供字段等于当前搜索文本的所有Tools (文字比较)。name

或者,考虑到区分大小写和其他本地化问题

searchTools = tools.filter { $0.name.localizedCaseInsensitiveContains(searchText) }

推荐阅读