Dwifft 是一个小型 Swift 库,它会告诉你两个集合之间的“差异”,也就是将一个集合变成另一个集合所需的“编辑操作”序列。它还带有 UIKit 绑定,可以通过在数据更改时自动、动画地保持 UITableView/UICollectionView 与数据同步,并为你进行必要的行/节插入/删除调用。
Dwifft 是一个 Swift 库,它做两件事。第一件事听起来很有趣,但可能只在抽象层面上有用,而另一件事是基于第一件事的一个非常具体且有用的东西。
第一件事(在 Dwifft.swift
中)是一种使用最长公共子序列方法计算两个集合之间差异的算法。如果你对这种事情感兴趣,这里有一篇关于差异算法的非常棒的论文:http://www.xmailserver.org/diff2.pdf
第二件事(在 Dwifft+UIKit.swift
中)是一系列用于 UITableView
和 UICollectionView
的差异计算器。假设你有一个 UITableView
,它由一个简单的值数组支持(例如,一个名字列表,例如 ["Alice", "Bob", "Carol"]
。如果该数组发生变化(也许 Bob 离开了,并被 Dave 取代,所以我们的列表现在是 ["Alice", "Carol", "Dave"]
),我们希望更新该表格。最简单的方法是在其上调用 reloadData
。这有几个缺点:过渡没有动画效果,并且如果用户滚动了表格,会导致他们失去滚动位置。更好的一种方法是使用 UITableView
上的 insertRowsAtIndexPaths:withRowAnimation
和 deleteRowsAtIndexPaths:withRowAnimation
方法,但这需要你弄清楚数组中哪些索引路径发生了变化(在我们的例子中,你必须弄清楚索引 1 处的行应该被删除,并且应该在索引 2 处添加一个新行)。如果我们有一种方法可以区分数组的先前值和新值就好了。等一下。
当你将 TableViewDiffCalculator
连接到你的 UITableView
(或将 CollectionViewDiffCalculator
连接到你的 UICollectionView
)时,它会在你更改其 sectionedValues
属性时自动计算差异并在其上触发必要的动画。很棒,对吧?值得注意的是,从 Dwifft 0.6 开始,Dwifft 还会计算节插入和删除,以及如何有效地插入和删除不同节中的行,如果你有一个多节表格,这非常有用。如果你当前使用的是 <0.6 版本的 Dwifft 并且想要这样做,请阅读0.6 版本说明。
在此激动人心的演讲视频中了解有关 Dwifft 历史及其工作原理的更多信息,该演讲视频于 2017 年 3 月在布鲁克林 Swift 聚会上录制。
欢迎贡献,但有一些注意事项 - 请在打开 PR 之前阅读贡献指南,以避免浪费我们双方的时间。
好的,就这样,这里没有更多内容了。