GenericParametersAndArguments (#1084)

* chore: 增加新段落的翻译

* Update 09_Generic_Parameters_and_Arguments.md

Co-authored-by: wamaker <fangzhou@dxy.cn>
Co-authored-by: Jie Liang <lj925184928@gmail.com>
This commit is contained in:
Zhou Fang
2020-07-09 20:52:48 +08:00
committed by GitHub
parent 72cb5a61b8
commit 99453d1d4e

View File

@ -49,6 +49,18 @@ simpleMax(3.14159, 2.71828) // T 被推断为 Double 类型
当然,替代类型形参的类型实参必须满足所有的约束和要求。
`where` 子句可以存在于包含类型参数的声明中,或作为声明的一部分,被嵌套另一个在含有类型参数的声明中。被嵌套的 `where` 子句依然可以指向包围它的声明中的类型参数,此时 `where` 子句需要满足的条件仅用于它被声明的地方。
如果外层的声明也有一个 `where` 子句,两个子句的条件都需要满足。下面的例子中,`startsWithZero()` 只有在 `Element` 同时满足 `SomeProtocol``Numeric` 才有效。
```swift
extension Collection where Element: SomeProtocol {
func startsWithZero() -> Bool where Element: Numeric {
return first == .zero
}
}
```
泛型函数或构造器可以重载,但在泛型形参子句中的类型形参必须有不同的约束或要求,抑或二者皆不同。当调用重载的泛型函数或构造器时,编译器会根据这些约束来决定调用哪个重载函数或构造器。
更多关于泛型 where 从句的信息和关于泛型函数声明的例子,可以看一看 [泛型 where 子句](../02_language_guide/22_Generics.md#where-clauses)。