我到目前爲止有一個tableView與多個選擇行一起工作。一切工作正常,除非我想獲得我選擇的行數組。獲取多個選定的行信息的一個可用視圖
這是我Stat.swift類:
class Stat: Equatable {
var statName: String = ""
var statCalendar: String = ""
var statEvents : [StatEvents] = []
}
struct StatEvents {
var isSelected: Bool = false
var name: String
var dateRanges: [String]
var hours: Int
}
func == (lhs: Stat, rhs: Stat) -> Bool {
return (lhs.statEvents == rhs.statEvents)
}
這裏是我的EventsViewController.swift類:
var currentStat = Stat()
var selectedMarks = [StatEvents]()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.font = UIFont.systemFontOfSize(8.0)
cell.textLabel?.text = "\(currentStat.statEvents[indexPath.row].name) \(currentStat.statEvents[indexPath.row].dateRanges) horas=\(currentStat.statEvents[indexPath.row].hours)"
if currentStat.statEvents[indexPath.row].isSelected{
cell.accessoryType = .Checkmark
} else {
cell.accessoryType = .None
}
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: false)
currentStat.statEvents[indexPath.row].isSelected = !currentStat.statEvents[indexPath.row].isSelected
if (contains(selectedMarks, currentStat.statEvents[indexPath.row])) {
//To-Do: remove the object in selectedMarks
} else {
selectedMarks.append(currentStat.statEvents[indexPath.row]) //add the object to selectedMarks
}
tableView.reloadData()
}
的問題是,在 「didSelectRowAtIndexPath方法」 的方法。當我選擇任何行時,它會將該對象追加到「selectedMarks」數組中(這工作正常),但問題是當我取消選擇某些行時,它應該刪除selectedMarks數組中的對象。我試圖使用「包含」的方法,但我在這行
could not find an overload for contains that accepts the supplied arguments
我通過在統計類添加Equatable協議更新我的問題得到一個編譯錯誤,但我再次得到了同樣的錯誤:
could not find an overload for contains that accepts the supplied arguments
,也得到一個新的錯誤:
Command failed due to signal: Segmentation fault: 11
快速提示:你的'StatEvents'存儲在一個數組中很重要嗎?另一個有趣的解決方案可能是使用Set(除了'StatEvent'類型採用'Equatable'還需要它採用'Hashable') - 然後在'tableView(_:didSelectRowAtIndexPath:)'您可以使用Set實例方法'exclusiveOr(_ :)'或'exclusiveOrInPlace(_ :)' - 而不是檢查數組是否已經包含成員並決定是否添加或刪除,當然這可能會影響整個代碼,但只是一個想法! – fqdn