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

时间:2017-04-14 16:36:47

标签: ios arrays swift

我有一个名为Service的自定义对象数组,在didSelectRow中我填充了该对象的所选数组:

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])
    }
}

问题在于我无法弄清楚如何从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?

    }

}

1 个答案:

答案 0 :(得分:5)

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

var selectedServices: [Service] {
    let indexPaths = self.tableView.indexPathsForSelectedRows ?? []
    return indexPaths.map { self.menu[$0.section].services[$0.row] }
}

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

如果您必须维持单独的状态,则可以使用index(where:)index(of:)找到该服务 - 请参阅How to find index of list item in 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)
}