Swift中的泛型约束--where语句
在泛型的参数列表中通过where子句可以为关联类型定义约束。where子句后跟一个或多个针对关联类型的约束,以及一个或多个类型参数和关联类型之间的相等关系。
下面的例子定义了一个名为 allItemsMatch 的泛型函数,用来检查两个 Container 实例是否包含相同顺序的相同元素。如果所有的元素能够匹配,那么返回 true,否则返回 false。
被检查的两个 Container 可以不是相同类型的容器(虽然它们可以相同),但它们必须拥有相同类型的元素。这个要求通过一个类型约束以及一个 where 子句来表示:
1  | func allItemsMatch<C1: Container, C2: Container>  | 
关于示例函数的说明:
- 函数的类型参数列表要求:
C1必须符合Container协议(写作C1: Container)。C2必须符合Container协议(写作C2: Container)。C1的ItemType必须和C2的ItemType类型相同(写作C1.ItemType == C2.ItemType)。C1的ItemType必须符合Equatable协议(写作C1.ItemType: Equatable)。
 - where子句要求:
someContainer是一个C1类型的容器。anotherContainer是一个C2类型的容器。someContainer和anotherContainer包含相同类型的元素。someContainer中的元素可以通过不等于操作符(!=)来检查它们是否彼此不同。