Как использовать enum и switch () с UITableViewController в Swift

Мой UITableView состоит из двух разделов, поэтому я создал для них перечисление:

private enum TableSections {
    HorizontalSection,
    VerticalSection
}

Как переключиться с помощью переменной "section", переданной в методе делегата numberOfRowsInSection? Кажется, мне нужно привести «section» к моему типу enum? Или есть лучший способ сделать это?

Ошибка"Enum case" HorizontalSection "не найден в типе '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
    }
}
 tktsubota24 июл. 2016 г., 05:56
Вы можете использовать необработанные значения.

Ответы на вопрос(3)

Джефф Льюис сделал все правильно, чтобы развить это и дать коду немного большей готовности -> мой способ справиться с этими вещами заключается в следующем:

Создание перечисления с необработанным значением -> индекс раздела

guard let sectionType = TableSections(rawValue: section) else { return 0 }

Используйте переключатель с типом раздела

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

я понял это, спасибо @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
    }
}
Решение Вопроса

private enum TableSection: Int {
    horizontalSection,
    verticalSection
}

Это делает так, что 'HorizontalSection' будет присвоено значение 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
    }
}
 Jeff Lewis21 нояб. 2016 г., 14:53
@ Спасибо, что поймали это, я отредактирую, чтобы показать это изменение
 KevinS24 июл. 2016 г., 07:09
Хотя @tktsubota указал мне верное направление, вы ответили полным ответом. Я отмечу это как Ответ. Спасибо.
 Herre21 нояб. 2016 г., 11:31
Одно замечание относительно соглашений об именах: «Дайте типам перечисления единственное, а не множественное число, чтобы они читались как самоочевидные», поэтому предпочтительно использовать TableSection iso TableSections в качестве имени для перечисления (cfrРуководство по языку программирования Swift)

Ваш ответ на вопрос