DeltaCalculator 是一个 Swift 库,专注于用动画插入、删除和移动操作来替换 reloadData()
调用。
DeltaCalculator 尝试优化计算所有更改所需的迭代次数,确保 UI 线程不会阻塞。
此框架基于 BKDeltaCalculator Objective-C 库。
DeltaCalculator 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile 中。
pod 'DeltaCalculator'
DeltaCalculator
比较两个数组并计算它们之间的差异,表示为 Delta
对象。DeltaCalculator
使用泛型,因此您需要在使用初始化器时提供类。
如果你的泛型类是 Equatable
,你可以不提供 equalityTest
就初始化计算器。
let deltaCalculator = DeltaCalculator<String>()
let delta = deltaCalculator.deltaFromOldArray(dataModel, toNewArray: newDataModel)
否则,您需要在初始化器中提供 equalityTest
。
let deltaCalculator = DeltaCalculator<NSDate>() { (lhs, rhs) -> Bool in
return lhs.compare(rhs) == .OrderedSame
}
let delta = deltaCalculator.deltaFromOldArray(dataModel, toNewArray: newDataModel)
要将 Delta
应用到 UITableView
上,您需要使用批更新,如下所示:
let delta = deltaCalculator.deltaFromOldArray(dataModel, toNewArray: newDataModel)
tableView.beginUpdates()
dataModel = newDataModel
delta.applyUpdatesToTableView(tableView, inSection: 0, withRowAnimation: UITableViewRowAnimation.Right)
tableView.endUpdates()
要将 Delta
应用到 UICollectionView
上,您也需要执行批更新。
let delta = deltaCalculator.deltaFromOldArray(dataModel, toNewArray: newDataModel)
collectionView.performBatchUpdates({
self.dataModel = newDataModel
delta.applyUpdatesToCollectionView(collectionView, inSection: 0)
}, completion: nil)
在 Example
目录中有一个示例项目。
Ivan Bruel,@ivanbruel
Delta 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。