在数组中查找自定义对象索引

Fed*_*ric 3 arrays ios swift

我有一个自定义对象数组,ServicedidSelectRow我填充我选择的该对象数组:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if let cell = tableView.cellForRowAtIndexPath(indexPath) {
        let services:[Service] = self.menu[indexPath.section].services
        self.selectedServices.append(services[indexPath.row])
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我无法弄清楚如何从didDeselectRow中检索它:

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    if let cell = tableView.cellForRowAtIndexPath(indexPath) {
        cell.accessoryType = .None
        let services = self.menu[indexPath.section].services
        let service = services[indexPath.row]
        //how can I found the index position of service inside selectedServices?

    }

}
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 5

我建议你不要存储selectedServices,但要依赖UITableView.indexPathsForSelectedRows.

var selectedServices: [Service] {
    let indexPaths = self.tableView.indexPathsForSelectedRows ?? []
    return indexPaths.map { self.menu[$0.section].services[$0.row] }
}
Run Code Online (Sandbox Code Playgroud)

这样,您无需手动维护selectedServices并可以删除整个tableView(_:didSelectRowAtIndexPath:)功能.


如果您必须维护一个单独的状态,您可以使用index(where:)或找到该服务index(of:)- 请参阅如何在Swift中查找列表项的索引?.

if let i = (self.selectedServices.index { $0 === service }) {
// find the index `i` in the array which has an item identical to `service`.
    self.selectedServices.remove(at: i)
}
Run Code Online (Sandbox Code Playgroud)