Swift:枚举tableView节和行之间

时间:2019-06-06 12:24:21

标签: ios swift enums tableview

我想在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:
                    ...
            }
        ...
}

像这样。

也许有更好的方法来枚举枚举... 有人可以告诉我一个非常聪明的解决方案吗?

谢谢:)

1 个答案:

答案 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)?()

注意:首先,您应该关心索引的安全性; 其次,您应该根据自己的要求修改答案,使其变得不可变。 更好的方法是使用通用方法。