Swift 的数组符合集合
Swift's Array conformance to Collection
给定两个符合 Codable、Equatable 和 Hashable 的 RandomModelObject
数组,我想计算它们之间的差异并在 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'
这些错误似乎没有指出任何地方 - Array 是一个 Collection 并且模型符合 Equatable。我错过了什么吗?
您正在使用 animateItemAndSectionChanges
,这不仅要求 T
是 Collection
,而且还要求 T
的元素是 Collection
s。换句话说,T
需要类似于二维数组。
这是因为 animateItemAndSectionChanges
同时处理行和部分。 2D 集合将告诉方法新旧行和部分是什么。每个“内部”集合代表一个部分。
由于您的数据源是一维数组,看来您只需要 animateRowChanges
,这是 single-section table 视图。
如果每个 RandomModelObject
实际上代表一个 部分 ,那么你需要 map
每个 RandomModelObject
一个数组,这样你就可以得到一个 [[Something]]
,并相应地更改 updateData
闭包。
给定两个符合 Codable、Equatable 和 Hashable 的 RandomModelObject
数组,我想计算它们之间的差异并在 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'
这些错误似乎没有指出任何地方 - Array 是一个 Collection 并且模型符合 Equatable。我错过了什么吗?
您正在使用 animateItemAndSectionChanges
,这不仅要求 T
是 Collection
,而且还要求 T
的元素是 Collection
s。换句话说,T
需要类似于二维数组。
这是因为 animateItemAndSectionChanges
同时处理行和部分。 2D 集合将告诉方法新旧行和部分是什么。每个“内部”集合代表一个部分。
由于您的数据源是一维数组,看来您只需要 animateRowChanges
,这是 single-section table 视图。
如果每个 RandomModelObject
实际上代表一个 部分 ,那么你需要 map
每个 RandomModelObject
一个数组,这样你就可以得到一个 [[Something]]
,并相应地更改 updateData
闭包。