这是一个高效的Swift实用程序,用于计算两个数组之间的差异。获取removedIndexes
和insertedIndexes
,并在更新您的数据时直接将它们传递给UITableView
或UICollectionView
!差异算法与diff
实用程序所使用的算法相同——它既健壮又快速。
这个框架的一个非常有用的用途是当更新UITableView或UICollectionView。调用reloadData
可能非常昂贵,但自己跟踪数组差异又非常不方便。
let old = [
BasicSection(name: "Alpha", items: ["a", "b", "c", "d", "e"]),
BasicSection(name: "Bravo", items: ["f", "g", "h", "i", "j"]),
BasicSection(name: "Charlie", items: ["k", "l", "m", "n", "o"])
]
let new = [
BasicSection(name: "Alpha", items: ["a", "b", "d", "e", "x"]),
BasicSection(name: "Charlie", items: ["f", "g", "h", "i", "j"]),
BasicSection(name: "Delta", items: ["f", "g", "h", "i", "j"])
]
let nestedDiff = old.diffNested(new)
// nestedDiff.sectionsDiff.removedIndexes == [1]
// nestedDiff.sectionsDiff.insertedIndexes == [2]
// nestedDiff.itemDiffs[0].removedIndexes == [2]
// nestedDiff.itemDiffs[0].insertedIndexes == [5]
// etc.
tableView.beginUpdates()
self.data = new
nestedDiff.applyToTableView(tableView, rowAnimation: .Automatic)
tableView.endUpdates()
将项目移动视为删除/插入,所以当它们被动画显示时,单元格将“瞬间”移动到其新位置,而不是滑动到那里。如果您希望此功能,请在该问题中告诉我!
请查看示例文件夹中的iOS应用程序,以查看此框架如何用于推动UITableView。其中我们有一个包含20个字符串部分的表格视图。当您点击更新时,数据会随机更新,并且我们断言我们所做的更改与框架通过比较两个数组所恢复的更改相同。
感谢https://github.com/khanlou/NSArray-LongestCommonSubsequence,我从中获得了灵感。