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
中的元素可以通过不等于操作符(!=
)来检查它们是否彼此不同。