通用排序比较器

CI codecov

AnySortComparatorSortComparator 协议 的类型擦除实现。

问题

SortComparator 具有 associatedType,因此不能用作一等类型。

例如,创建 SortComparator 数组是无效的

let comparators: [SortComparator] // Not Valid!

考虑到 Sequence 协议提供了一个使用 SortComparator Sequence 进行排序的方法,如果能解除仅使用 SortComparator 的一个具体实现的约束,这将很好。

解决方案

AnySortComparator 保留了原始比较函数的行为,同时仍然允许修改顺序。

可哈希

给定 AnySortComparatorhashValue 不等于它持有的 'base' 比较器的 hashValue。 正如预期的那样,如果两个 AnySortComparator 的 'base' 比较器具有相等的 hashValue 并且它们的 order 相同,则它们的 hashValue 将会相等。 或者换句话说

AnySortComparator(KeyValueComparator(\Int.self)).hashValue != KeyValueComparator(\Int.self).hashValue

AnySortComparator(KeyValueComparator(\Int.self)).hashValue == AnySortComparator(KeyValueComparator(\Int.self)).hashValue