泛型
泛型函数
1 | func swapTwoValues<T>(inout a: T, inout _ b: T) { |
类型参数
<T>
<Key>
<Value>
驼峰式命名法
泛型类型
1 | struct Stack<T> { |
扩展一个泛型类型
扩展一个泛型类型,不需要在扩展的定义中提供类型参数列表。原始类中声明的类型参数列表也可在扩展中使用
1 |
|
类型约束
1 | func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) { |
类型约束实例
1 | func findIndex<T: Equatable>(array: [T], _ valueToFind:T) -> Int? { |
关联类型
当定义一个协议时,有的时候声明一个或多个关联类型作为协议定义的一部分是非常有用的。一个关联类型作为协议的一部分,给定了类型的一个占位名(或别名)。作用于关联类型上实际类型在协议被实现前是不需要指定的。关联类型被指定为typealias关键字。
关联类型实例
1 | protocol Container { |
扩展一个存在的类型为一指定关联类型
1 | extension Array : Container {} |
Array本身已经实现了Container 的方法,所以只需通过扩展使Array遵循协议,即可将Array当做Container类型使用
Where
1 | func allItemsMatch< |