Вложенные перечисления для табличного представления с несколькими разделами - PullRequest
2 голосов
/ 10 июля 2019

Здесь - мое меню. Первоначально я начал с одного раздела в моем tableView меню и использовал enum для заполнения ячеек. Теперь я хочу добавить больше разделов. Я пытаюсь использовать вложенные enum с. Я нашел этот ответ и этот ответ , которые показали мне, как реализовать вложенный enum.

Это моя попытка. Case A для section 1 в таблице, Case B для section 2 и т. Д .:

enum MenuOption {

    case Section0(A) // for tableView section 0
    case Section1(B) // for tableView section 1
    case Section2(C) // for tableView section 2

    enum A: Int, CaseIterable, CustomStringConvertible {

        case Categories
        case Favourites
        case Search

        var description: String {
            switch self {
            case .Categories: return "Categories"
            case .Favourites: return "Favourites"
            case .Search: return "Search"
            }
        }
    }

    enum B: Int , CaseIterable, CustomStringConvertible {

        case Notifications
        case RateThisApp

        var description: String {
            switch self {
            case .Notifications: return "Notifications"
            case .RateThisApp: return "Rate This App"
            }
        }
    }

    enum C: Int , CaseIterable, CustomStringConvertible {
        case Developer

        var description: String {
            switch self {
            case .Developer: return "App Developer"
            }
        }
    }
}

Для моего tableView в cellForRowAt я бы использовал что-то вроде этого

cell.descriptionLabel.text = MenuOption.A(rawValue: indexPath.row)?.description

А в numberOfRowsInSection я бы вернул MenuOption.A.allCases.count

Но я не хочу A. Мне нужно определить, что A предназначено для section 0, B == section 1, C == section 2 и т. Д., Но я не знаю, как связать дела enum с секциями tableView.

Эта статья о «Перечислении перечислений в Swift» заставляет меня думать, что то, что я пытаюсь сделать, возможно, но опять же, я борюсь с реализацией и сейчас не уверен, стоит ли это делать. Я считаю, что мне нужно " синтезировать соответствие CaseIterable " для моего MenuOption enum

Любая помощь приветствуется.

...