Encuentre un índice de objects personalizado en array

Tengo una matriz de objects personalizados llamada Service y en didSelectRow mi matriz seleccionada de ese object:

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

El problema es que no puedo descifrar cómo recuperarlo de 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? } } 

Sugiero que no almacene los services selectedServices , pero confíe en UITableView.indexPathsForSelectedRows .

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

De esta forma, no necesita mantener manualmente selectedServices y podría eliminar toda la function tableView(_:didSelectRowAtIndexPath:) .


Si debe mantener un estado separado, puede encontrar el service utilizando el index(where:) o el index(of:) : consulte Cómo encontrar el índice del elemento de la list en 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) }