相关疑难解决方法(0)

Swift DiffableDataSource 进行插入和删除而不是重新加载

我很难理解 DiffableDataSource 是如何工作的。我有这样的 ViewModel

struct ViewModel: Hashable {
  var id: Int
  var value: String

  func hash(into hasher: inout Hasher) {
     hasher.combine(id)
  }
}
Run Code Online (Sandbox Code Playgroud)

我有 tableView 由 cachedItems 填充,如上面的 ViewModele。当 API 响应到达时,我想添加一个新的,删除缺失的一个,刷新 tableView 中已经存在的项目的 viewModel.value 并最终订购它。除了一件事 - 重新加载物品外,一切正常。

我对 DiffableDataSource 的理解是它比较 item.hash() 以检测项目是否已经存在,如果存在,那么如果 cachedItem != apiItem,它应该重新加载。不幸的是,这不起作用,快照确实删除和插入而不是重新加载。

DiffableDataSource 应该这样做吗?

当然,我有一个解决方案 - 为了使它工作,我需要遍历 cachedItems,当新项目包含相同的 id 时,我更新 cachedItem,然后我在没有动画的情况下应用快照,然后我终于可以应用带有动画的删除/插入/订购动画。

但是这个解决方案似乎更像是一个黑客而不是一个有效的代码。有没有更清洁的方法来实现这一目标?

更新:

有代码显示问题。它应该在操场上工作。例如。items 和 newItems 包含 id == 0 的 viewModel。哈希值相同,因此 diffableDataSource 应该重新加载,因为副标题不同。但是有可见的删除/插入而不是重新加载


import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {
    let tableView = UITableView() …
Run Code Online (Sandbox Code Playgroud)

swift diffabledatasource

8
推荐指数
1
解决办法
562
查看次数

标签 统计

diffabledatasource ×1

swift ×1