【问题标题】:Correct way to update model variable inside UICollectionViewDiffableDataSource in iOS在 iOS 中更新 UICollectionViewDiffableDataSource 中的模型变量的正确方法
【发布时间】:2020-07-07 10:59:27
【问题描述】:

我正在使用UICollectionViewDiffableDataSource 开发一个应用程序。一切都像魅力一样,事实上,当我添加新模型时,我的collectionView 会自动更新。但是,当我更新现有元素之一时,我无法看到更新的单元格。

这是一个例子:

我有这个模型

final class Contact: Hashable {
    var id: UUID
    var name: String
    
    init(id: UUID = UUID(), name: String) {
        self.id = id
        self.name = name
    }
    
    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
        hasher.combine(name)
    }
    static func == (lhs: Contact, rhs: Contact) -> Bool {
        
        return lhs.id == rhs.id
    }
    
}

填充了我的UICollectionView。例如,如果我尝试在didSelectItem 上更新它的名称,然后调用我的函数来分析与NSDiffableDataSourceSnapshot 的差异,它不会更新我的UICollectionView。如果我在 didSelect 上添加另一个 Contact(仅用于测试),我的 UICollectionView 会根据我的需要完美更新。

【问题讨论】:

    标签: ios swift xcode uicollectionviewdiffabledatasource


    【解决方案1】:

    我刚刚自己解决了。我试图将类声明更改为struct 而不是final class。我真的不知道为什么,但似乎在声明为Class 的项目数组中,快照检查引用是否相同,但不是其内容。所以当我更新任何变量时它不会更新视图,即使我将它们添加到 hash required functionequatable required function

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      相关资源
      最近更新 更多