如何解决Swift对集合的数组一致性
给出两个符合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
。换句话说,T
必须类似于2D数组。
这是因为animateItemAndSectionChanges
同时处理行和节。 2D集合将告诉该方法新旧的行和节是什么。每个“内部”集合都代表一个部分。
由于您的数据源是一维数组,因此似乎只需要animateRowChanges
(用于单节表视图)即可。
如果每个RandomModelObject
实际上代表一个 section ,那么您需要将其中的每个map
放入一个数组中,以便得到一个[[Something]]
,并相应地更改updateData
闭包。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。