我有一个名为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?
}
}
答案 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)
}