Swift 编程中的集合类型与通用类型解析
1. 条件一致性在数组比较中的应用
在 Swift 标准库中,条件一致性(conditional conformance)填补了语言曾经存在的一个严重漏洞。例如,当数组元素是可比较的(Equatable)时,我们可以比较两个数组是否相等:
let arr1 = [1,2,3]
let arr2 = [1,2,3]
if arr1 == arr2 {
// ...
}
数组相等的含义很明确,即两个数组包含相同顺序的相同元素。元素必须是可比较的,以保证“相同元素”这一概念的意义。
然而,在 Swift 4.1 之前,无法比较两个数组的数组:
let arr1 = [[1], [2], [3]]
let arr2 = [[1], [2], [3]]
// 编译错误(Swift 4.1 之前)
这是因为之前没有一致的方法使数组本身成为可比较的,即无法断言只有当数组元素是可比较时,数组才是可比较的。这就是条件一致性的作用!现在有了条件一致性,标准库中这样定义:
extension Array : Equatable where Element : Equatable {
// ...
}
这样,比较数组的数组就合法了:
l
超级会员免费看
订阅专栏 解锁全文


被折叠的 条评论
为什么被折叠?



