这两种声明带有或不带'where'子句的泛型超类的方法有什么区别?
func foo<T: SomeClass>(object: T) -> Array<T>
func foo<T>(object: T) -> Array<T> where T: SomeClass
Run Code Online (Sandbox Code Playgroud)
Swe*_*per 10
Swift指南中明确说明了这一点:
泛型where子句中的要求指定类型参数继承自类或符合协议或协议组合.虽然泛型where子句为表达类型参数的简单约束提供了语法糖(例如,
<T: Comparable>等同于<T> where T: Comparable等等),但您可以使用它来为类型参数及其关联类型提供更复杂的约束.例如,您可以约束类型参数的关联类型以符合协议.例如,<S: Sequence> where S.Iterator.Element: Equatable指定S符合Sequence协议并且关联类型S.Iterator.Element符合Equatable协议.该约束确保序列的每个元素是等同的.
简而言之,where允许您指定关于泛型参数的关联类型的约束,而在<>您不能这样做.
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |