ListDiff 0.2.0

ListDiff 0.2.0

维护者 Stan Chang Khin Boon.



ListDiff 0.2.0

  • 作者
  • Stan Chang Khin Boon

Build Status

ListDiff

ListDiff 是 IGListKit 的 IGListKitIGListDiff 的 Swift 版本。它是 Paul Heckel 的一个算法的实现,该算法用于计算两个数组之间的差异。

动机

这个项目的动机来自于以下 挑战,我从 Ryan NystromiOSConf.SG 的讲话中了解到。

入门

swift package generate-xcodeproj

安装

CocoaPods

pod 'ListDiff'

Carthage

github "lxcid/ListDiff" "master"

使用说明

import ListDiff

extension Int : Diffable {
    public var diffIdentifier: AnyHashable {
        return self
    }
}
let o = [0, 1, 2]
let n = [2, 1, 3]
let result = List.diffing(oldArray: o, newArray: n)
// result.hasChanges == true
// result.deletes == IndexSet(integer: 0)
// result.inserts == IndexSet(integer: 2)
// result.moves == [List.MoveIndex(from: 2, to: 0), List.MoveIndex(from: 1, to: 1)]
// result.changeCount == 4

理由

在移植过程中,我作出了几个决定,在这里我会进行理性分析。

  • 使用不区分大小写的枚举作为命名空间。参见Erika Sadun的文章
  • 不支持索引路径。决定这超出了范围。
  • 栈与堆。据我所知,Swift并不提倡考虑栈与堆分配模型,把优化决策留给编译器。尽管如此,某些准则更倾向于使用struct,因此只有List.Entry是一个(最终的)类,因为我们需要对其实例的引用。

替代方案