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
протокол