ArrayDiff 1.2.0

ArrayDiff 1.2.0

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布上次发布2016年2月
SPM支持SPM

ADlai Holler维护。



ArrayDiff 1.2.0

  • Adlai-Holler

ArrayDiff

这是一个高效的Swift实用程序,用于计算两个数组之间的差异。获取removedIndexesinsertedIndexes,并在更新您的数据时直接将它们传递给UITableViewUICollectionView!差异算法与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,我从中获得了灵感。