IGListkit网络责任

时间:2018-09-29 23:52:29

标签: ios iglistkit

使用IGListkit并对获取数据的职责有些困惑。

虚拟示例-假设我正在处理汽车类别,并且我想让区域控制器本质上与该类别的汽车品牌一起做事。

我的视图控制器具有品牌概念,并且各节控制器将显示这些汽车品牌的型号列表:

  • 本田
    • 思域
    • 飞行员
    • 雅阁

在应用程序中,我需要进行网络调用以获取各个模型。

这种责任应该由视图控制器负责,实质上是多次调用api,获取品牌的所有模型,建立模型,然后将它们传递给section控制器吗?

还是视图控制器会简单地将品牌(本田)传递给部门控制器,然后部门控制器负责进行网络调用并获取所有品牌并重新加载自身?

1 个答案:

答案 0 :(得分: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方法

中为节/单元格设置不同的类。