我想在tableView中选择一行。 但是
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.section {
case 0:
switch indexPath.row {
case 0:
...
}
...
}
我想迭代
private enum Section {
case section0
case section1
...
}
private enum Section0 {
case section0row0
case section0row1
...
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch Section(rawValue: indexPath.section)! {
case .section0:
switch Section0(rawValue: indexPath.row)! {
case section0row0:
...
}
...
}
像这样。
也许有更好的方法来枚举枚举... 有人可以告诉我一个非常聪明的解决方案吗?
谢谢:)
答案 0 :(得分:-2)
有很多方法可以解决这个问题,最简单但不是最好的方法之一就是一系列动作
例如:
import UIKit
import Foundation
typealias closure = ()->()
extension Collection {
subscript (safe index: Index) -> Element? {
return indices.contains(index) ? self[index] : nil
}
}
struct ListOfAction {
private var list: Array<Array<closure>>
init() {
self.list = [[]]
}
mutating func append(_ at: IndexPath,method:@escaping closure) {
self.list[at.section].append(method)
}
mutating func insert(_ at: IndexPath,method:@escaping closure) {
self.list[at.section].insert(method, at: at.row)
}
func call(at:IndexPath) {
self.list[safe: at.section]?[safe: at.row]?()
}
func getClosure(at: IndexPath) -> closure? {
return self.list[safe: at.section]?[safe: at.row]
}
}
var listOfAction = ListOfAction()
var idx = IndexPath(row: 0, section: 0)
listOfAction.append(idx) {
print("hello World")
}
listOfAction.insert(IndexPath(row: 1, section: 0)) {
print("bye World")
}
listOfAction.call(at: IndexPath(row: 1, section: 0))
listOfAction.getClosure(at: idx)?()
注意:首先,您应该关心索引的安全性; 其次,您应该根据自己的要求修改答案,使其变得不可变。 更好的方法是使用通用方法。