Swift参数及泛型参数参考
本节涉及泛型类型、泛型函数以及泛型构造器的参数,包括形参和实参。声明泛型类型、函数或构造器时,须指定相应的类型参数。类型参数相当于一个占位符,当实例化泛型类型、调用泛型函数或泛型构造器时,就用具体的类型实参替代之。
关于 Swift 语言的泛型概述,见泛型(第二部分第22章)。
泛型形参语句
泛型形参语句指定泛型类型或函数的类型形参,以及这些参数的关联约束和要求。泛型形参语句用尖括号(<>)包住,并且有以下两种形式:
<generic parameter list> <generic parameter list where requirements >
泛型形参列表中泛型形参用逗号分开,每一个采用以下形式:
type parameter : constrain
泛型形参由两部分组成:类型形参及其后的可选约束。类型形参只是占位符类型(如T,U,V,KeyType,ValueType等)的名字而已。你可以在泛型类型、函数的其余部分或者构造器声明,以及函数或构造器的签名中使用它。
约束用于指明该类型形参继承自某个类或者遵守某个协议或协议的一部分。例如,在下面的泛型中,泛型形参T: parable协议。
func simpleMin<T: COmparable>(x: T, y: T) -> T {
if x < y {
return y
}
return x
}
如,parable协议,该函数接受任何一种类型。与泛型类型相反,调用泛型函数或构造器时不需要指定泛型实参语句。类型实参由传递给函数或构造器的实参推断而出。
simpleMin(17, 42)
// T is inferred to be Int
simpleMin(, )
// T is inferred to be Double
Where语句
要想对类型形参及其关联类型指定额外要求,可以在泛型形参列表之后添加where语句。where语句由关键字where及其后的用逗号分割的多个要求组成。
where语句中的要求用于指明该类型形参继承自某个类或遵守某个协议或协议的一部分。尽管where语句有助于表达类型形参上的简单约束(如T: Comparable等同于T where T: Comparable,等等),但是依然可以用来对类型形参及其关联约束提供更复杂的约束。如,<T where T: C, T: P>表示泛型类型T继承自类C且遵守协议P。
如上所述,可以强制约束类型形参的关联类型遵守某个协议。<T: Generator where : Equatable>表示T遵守Generator协议,(T有关联类型是因为Generator声明了Element,而T遵守Ge
nerator协议)。
也可以用操作符==来指定两个类型等效的要求。例如,有这样一个约束:T和U遵守Generator协议,同时要求它们的关联类型等同,可以这样来表达:<T: Generator, U: Generator where == >。
当然,替代类型形参的类型实参必须满足所有类型形
Swift参数及泛型参数参考 来自淘豆网www.taodocs.com转载请标明出处.