IGListkit ответственность за сеть

Используя IGListkit и немного запутался в ответственности за сбор данных.

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

Контроллер My View имеет концепцию брендов, а в секциях контроллеров будет отображаться список моделей для этих марок автомобилей:

  • Honda
    • гражданского
    • пилот
    • соглашение

В приложении мне нужно сделать сетевой звонок, чтобы получить отдельные модели.

Будет ли эта ответственность за контроллер представления, по сути, многократно вызывая API, получая все модели для бренда, создавая модели и затем передавая их контроллеру секций?

Или контроллер представления просто передает марку (Honda) контроллеру секции, и тогда контроллер секции отвечает за выполнение сетевого вызова, захват всех своих марок и перезагрузку самого себя?

0 ответов

IGListKit работает с массивами объектов для создания необходимых для них разделов. Я бы не стал помещать все сети в класс UIViewController, а вместо этого - создать ListAdapterDataSource подкласс для вашей конкретной задачи, которая будет делать 3 разных сетевых запросов.

В обратном вызове для каждого из них вы добавите результаты в ListDiffable массив:

var users: [ListDiffable] = [] {
    didSet {
        update()
    }
}

private func update() {
    DispatchQueue.main.async { [weak self] in
        self?.adapter.performUpdates(animated: true, completion: { _ in
            self?.loading = false
        })
    }
}

Вызов performUpdates таким образом, IGListKit использует свой интеллектуальный алгоритм сравнения, чтобы изменять или добавлять только недавно добавленные ячейки, оставляя уже отображенные нетронутыми и не влияя на производительность. Вы можете установить различные классы для разделов / ячеек в func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController метод ListAdapterDataSource протокол

Другие вопросы по тегам