声明带有或不带有“ where”子句的泛型超类的这两种方法之间有什么区别?
func foo<T: SomeClass>(object: T) -> Array<T> func foo<T>(object: T) -> Array<T> where T: SomeClass
Swift指南中明确说明了这一点:
通用where子句中的要求指定类型参数从类继承或符合协议或协议组成。尽管泛型where子句提供了语法糖来表达对类型参数的简单约束(例如,<T: Comparable>等价于<T> where T: Comparable等),但是您可以使用它为类型参数及其关联的类型提供更复杂的约束。例如,您可以约束类型参数的关联类型以符合协议。例如,<S: Sequence> where S.Iterator.Element: Equatable指定S符合Sequence协议且关联的类型 S.Iterator.Element符合Equatable协议。该约束确保序列中的每个元素都是相等的。
<T: Comparable>
<T> where T: Comparable
<S: Sequence> where S.Iterator.Element: Equatable
S
Sequence
S.Iterator.Element
Equatable
简而言之,where让您指定有关泛型参数关联类型的约束,而<>您不能这样做。
where
<>