如何在Swift中使用带有UITableViewController的枚举和switch()

时间:2016-07-24 03:44:12

标签: ios swift

我的UITableView有两个部分,所以我为它们创建了一个枚举:

private enum TableSections {
    HorizontalSection,
    VerticalSection
}

如何切换numberOfRowsInSection委托方法中传递的“section”var?看来我需要将“section”转换为我的枚举类型?或者有更好的方法来实现这一目标吗?

错误是“Enum case”Horizo​​ntalSection“未在类型'int'中找到。

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    switch section {

    case .HorizontalSection:
        return firstArray.count

    case .VerticalSection:
        return secondArray.count

    default 
        return 0
    }
}

3 个答案:

答案 0 :(得分:5)

为了做到这一点,你需要给你的枚举一个类型(在这种情况下为Int):

private enum TableSection: Int {
    horizontalSection,
    verticalSection
}

这使得'horizo​​ntalSection'将被赋值为0,'verticalSection'将被赋值为1.

现在,在您的numberOfRowsInSection方法中,您需要在枚举属性上使用.rawValue才能访问其整数值:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    switch section {

    case TableSection.horizontalSection.rawValue:
        return firstArray.count

    case TableSection.verticalSection.rawValue:
        return secondArray.count

    default:
        return 0
    }
}

答案 1 :(得分:3)

杰夫·刘易斯做得对,详细阐述并给予代码更多的准备 - >我处理这些事情的方法是:

  1. 使用原始值实例化枚举 - >部分索引
  2. guard let sectionType = TableSections(rawValue: section) else { return 0 }

    1. 使用部分类型为
    2. 的开关

      switch sectionType { case .horizontalSection: return firstArray.count case .verticalSection: return secondArray.count }

答案 2 :(得分:2)

好的,我想通了,谢谢@tktsubota指出我正确的方向。我对Swift很陌生。我查看了.rawValue并进行了一些更改:

private enum TableSections: Int {
    case HorizontalSection = 0
    case VerticalSection = 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    switch section {

    case TableSections.HorizontalSection.rawValue:
        return firstArray.count

    case TableSections.VerticalSection.rawValue:
        return secondArray.count

    default 
        return 0
    }
}