2017-04-14 121 views
3

自定義對象的索引我有自定義對象的數組稱爲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]) 
    } 
} 

的問題是,我無法弄清楚如何檢索從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

selectedServices [indexPath.row]怎麼樣 –

+0

你有沒有試過self.selectedServices [indexPath.row]? – AgnosticDev

+0

否請閱讀代碼 – Federic

回答

4

我建議你不要儲存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) 
} 
+0

哇,這是一個答案;) – Federic