给定两个数组 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
,这不仅需要 T
是 Collection
, 但它也要求 T
的元素是 Collection
s。换句话说,T
需要类似于二维数组。
这是因为 animateItemAndSectionChanges
处理行和部分。 2D 集合将告诉方法新旧行和部分是什么。每个“内部”集合代表一个部分。
由于您的数据源是一维数组,因此您似乎只需要 animateRowChanges
,用于单节 TableView 。
如果每个 RandomModelObject
实际代表一个section,那么你需要map
每一个到一个数组,这样你就得到一个 [[Something]]
,并更改 updateData
相应地关闭。
关于ios - Swift 的 Array 对 Collection 的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63450233/