【问题标题】:IGListkit networking responsibilityIGListkit 网络责任
【发布时间】:2018-09-29 23:52:28
【问题描述】:

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

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

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

  • 本田
    • 公民
    • 飞行员
    • 雅阁

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

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

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

【问题讨论】:

  • 我个人会创建一个 MVVM 架构,每个视图模型负责获取数据。但是如果是这种情况,您可以简单地使您的模型以这种方式制作,这样它们就可以有一个品牌名称作为字符串和一个 carModels 数组,这是另一个具有名称等的模型。通过这种方式,您可以在第一个视图控制器,然后在 sectioncontroller 内部,您可以访问每个品牌的每个数组。

标签: ios iglistkit


【解决方案1】:

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 使用其智能差异算法仅更改/添加最近添加的单元格,保持已显示完整且不影响性能。您可以在ListAdapterDataSource 协议的func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController 方法中为部分/单元格设置不同的类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2023-03-06
    • 1970-01-01
    • 2023-03-10
    • 2020-02-08
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多