1

使用 IGListkit 并且对抓取数据的职责有点困惑。

虚拟示例 - 假设我正在处理车辆类别,并且我希望有一个部分控制器基本上对某个类别的汽车品牌进行处理。

我的视图控制器有一个品牌的概念,部分控制器将显示这些汽车品牌的模型列表:

  • 本田
    • 思域
    • 飞行员
    • 符合

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

这个责任是否应该由视图控制器负责,本质上是多次调用 api,获取品牌的所有模型,构建模型,然后将它们传递给部分控制器?

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

4

1 回答 1

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

于 2019-01-23T08:58:11.583 回答