ios - Swift 的 Array 对 Collection 的一致性

标签 ios swift uicollectionview array-difference

给定两个数组 RandomModelObject符合 Codable、Equatable 和 Hashable 我想计算它们之间的差异并在 UICollectionView 中为内容更改设置动画。必须支持 iOS 11 让我选择了 https://github.com/tonyarnold/Differ作为这样做的依赖。
这段代码:

class ScreenNameCollectionViewDataSource {
    var elements: [RandomModelObject] = []
}

extension ScreenNameViewController: ScreenNameViewModelDelegate {
    func elementsStoreUpdated() {
        collectionView.animateItemAndSectionChanges(oldData: dataSource.elements,
                                                    newData: viewModel.blablabla, 
                                                    updateData: {
            dataSource.elements = viewModel.blabla
        })
    }
}
产生2个错误:
Instance method 'animateItemAndSectionChanges(oldData:newData:indexPathTransform:sectionTransform:updateData:completion:)' requires that 'RandomModelObject.Element' conform to 'Equatable'

Instance method 'animateItemAndSectionChanges(oldData:newData:indexPathTransform:sectionTransform:updateData:completion:)' requires that 'RandomModelObject' conform to 'Collection'
错误似乎没有指向我任何地方 - 数组是一个集合,模型符合 Equatable。我错过了什么吗?

最佳答案

您正在使用 animateItemAndSectionChanges ,这不仅需要 TCollection , 但它也要求 T的元素是 Collection s。换句话说,T需要类似于二维数组。
这是因为 animateItemAndSectionChanges处理行和部分。 2D 集合将告诉方法新旧行和部分是什么。每个“内部”集合代表一个部分。
由于您的数据源是一维数组,因此您似乎只需要 animateRowChanges ,用于单节 TableView 。
如果每个 RandomModelObject实际代表一个section,那么你需要map每一个到一个数组,这样你就得到一个 [[Something]] ,并更改 updateData相应地关闭。

关于ios - Swift 的 Array 对 Collection 的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63450233/

相关文章:

ios - 在 UICollectionViewCell 中更新 UIProgressView

ios - ScrollView 以及 Collection View 单元格

android - 适用于 Android 和 iOS 的 MQTT over websocket

ios - IIS 是否重定向以匹配 url 大小写?

swift - 如何获得特定的日期格式?

ios - Alamofire:无论 timoutIntervalForRequest 如何,1 秒内为 'The request timed out'

ios - 无法将 Lottie 动画 View 添加到 Collection View 单元格

iOS:从 Crashlytics 了解 SIGABRT 崩溃

ios - 从另一个 Controller 更新 UI

ios - 在 Swift 中对 NSDictionary 对象的 NSArray 进行排序