BKDeltaCalculator是一个轻量级的Objective-C库,可以将两个集合转换为更改集。这些更改可以应用于UITableView和UICollectionView实例的批量更新中,提供一种更声明性的方式来更新您的视图。
BKDeltaCalculator通过CocoaPods提供。要安装它,只需将以下行添加到Podfile中。
pod "BKDeltaCalculator"
BKDeltaCalculator比较两个数组,并计算它们之间的差分,该差分由BKDelta对象表示。这两个数组可能包含旧的和新的模型,例如要在表格视图或收集视图中显示的模型。
BKDeltaCalculator *calculator = [BKDeltaCalculator defaultCalculator];
BKDelta *delta = [calculator deltaFromOldArray:oldArray toNewArray:newArray];
当旧数组表示当前显示的单元格,新数组表示要显示的单元格时,您可以应用BKDelta到UITableView或UICollectionView。使用批量更新平滑地动画单元格。
// With a UITableView:
[tableView beginUpdates];
BKDelta *delta = [[BKDeltaCalculator defaultCalculator] deltaFromOldArray:_items toNewArray:newItems];
[delta applyUpdatesToTableView:tableView inSection:0 withRowAnimation:UITableViewRowAnimationFade];
_items = [newItems copy];
[tableView endUpdates];
// With a UICollectionView:
[collectionView performBatchUpdates:^{
[delta applyUpdatesToCollectionView:collectionView inSection:0];
_items = [newItems copy];
} completion:nil];
默认情况下,BKDeltaCalculator使用严格等性检查来比较两个数组中的项目,这些检查比较对象标识符。您还可以提供自定义比较器
BKDeltaCalculator calculator = [BKDeltaCalculator deltaCalculatorWithEqualityTest:^(id a, id b) {
return (a == b) || [a isEqual:b];
}];