Dwifft!
10 秒内
Dwifft 是一个小的 Swift 库,它告诉您两个集合之间的“差异”是什么,即转换为对方所需的“编辑操作”系列。它还包含 UIKit 绑定,可以自动、动画地保持 UITableView/UICollectionView 与数据同步,在数据更改时为您调用必要的行/部分插入/删除调用。
更长的版本
Dwifft 是一个 Swift 库,执行两个功能。第一个听起来很有趣,但也许只有抽象上有用,而第二个则是基于第一个的一个非常有用的具体事物。
第一个(在 Dwifft.swift
中找到)是一个算法,它使用 最长公共子序列方法计算两个集合之间的差异。如果您对这类事情感兴趣,有一篇关于差异算法的相当不错的论文:[http://www.xmailserver.org/diff2.pdf](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还会识别节插入和删除,以及如何在不同节之间高效地插入和删除行,这对于拥有多节表格的用户来说非常有用。如果你目前正在使用Dwifft 0.6版本以下,并想这样做,请阅读0.6版发布说明。
更长的版本
在2017年3月的布鲁克林Swift聚会中录制的这场谈话中,你可以了解更多关于Dwifft的历史以及它是如何工作的激动人心的视频。
为什么你应该使用Dwifft
- Dwifft是有用的 - 如果你的应用中包含具有动态内容的表格/收集视图,则它可以帮你构建一个显著的更好的用户体验。
- Dwifft是安全的 - 这个差异算法中包含了一些不平凡的索引数学,很容易出差错。Dwifft为其所有核心算法提供了100%的测试覆盖率。此外,Dwifft的所有核心功能都使用了SwiftCheck进行了测试,这意味着它被证明在各种输入和边缘情况下的行为是正确的。
- Dwifft是快速的 - 大量时间被用来让Dwifft比原始实现快得多。它几乎不可能成为你UI代码的瓶颈。
- Dwifft 是 小巧的 - Dwifft 相信(就像一个软件库一样)在小工具的 Unix 哲学中,易于组合。它没有立场,足够灵活以适应大多数应用程序,并作为开发者将控制权交到你的手中。因此,你可能不到 5 分钟就能将它塞进你的应用程序。此外,因为它很小,实际上可以达到100%测试和文档覆盖率等美好目标。
如何开始
- 首先,你应该看一下示例应用程序,感受一下 Dwifft 应该如何使用。
- 接下来,你应该坐下来阅读完整的文档 - 这将花费你不到10分钟,你将了解到关于 Dwifft的一切。
- 然后,通过 cocoapods、carthage 或人们现在使用的方法安装 Dwifft。
- 然后开始 Dwiffing。
贡献
欢迎贡献,但也有几点注意事项 - 在提交 PR 之前,请阅读 贡献指南,以免浪费时间。
好的,就是这样,没有更多内容了。