Динамическое создание регистров - PullRequest
0 голосов
/ 14 января 2020

Я не уверен, возможно ли это, я осмотрелся, проверил в Интернете и, наконец, разместил здесь этот вопрос.

У меня есть 3 раздела в UITableView, но только третий раздел появляется, если моя модель данных обновлена ​​

enum Section: Int {
    case title, accounts, pending, total
}

в моем numberOfSections, которое у меня есть на данный момент,

return (pendingDataModel != nil) ? 3 : 2

Возможно ли обработать это в вычисляемом свойстве enum? например, исходя из вышеуказанного условия, добавляя и скрывая регистр pending, чтобы я мог использовать только Section.total.rawValue, чтобы получить счетчик моего раздела?

Редактировать: я нашел этот ответ, но это не то, что мне нужно Добавление регистра в существующее перечисление с протоколом

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Перечисления с вложенным перечислением могут быть решением

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        pendingDataModel != nil ?
            Section.Count.hasPendingRecords.rawValue : Section.Count.noPendingRecords.rawValue
    }

enum Section: Int {
    case title, accounts, pending, total

    enum Count: Int {
        case hasPendingRecords = 3
        case noPendingRecords = 2
    }
}
0 голосов
/ 14 января 2020

Одна из идей - использовать структуру в качестве посредника между данными и контроллером представления. Эта структура может быть создана и использована таким методом, как число ячеек таблицы; каждый раз, когда вашему представлению нужно знать свой макет, оно конструирует себя, используя информацию о том, существуют ли ожидающие данные.

enum Section: Int, CaseIterable {
    case title, accounts, pending, total
}

struct SectionData {

    var sections: [Section]

    init(hasPendingData: Bool) {
        if (hasPendingData) {
            sections = Section.allCases
        } else {
            sections = [.title, .accounts]
        }
    }

}

class MyViewController: UIViewController {

    var pendingModelData: Data?

    func sectionCount() -> Int {
        return SectionData(hasPendingData: pendingModelData != nil).sections.count
    }

}

Если пойти еще дальше, вы можете использовать didSet для pendingModelData для обновления представлений, отображающих разделы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...