标签:
1、概述
泛型是Swift中最强大的特性之一,使用泛型可以写出灵活、可重用、干净、抽象的代码,并且避免代码重复。实际上在第一章中我们就接触到了泛型,Array 和 Dictionary 是泛型容器,可以存入任何类型。
2. 泛型所要解决的问题 The Problem That Generics Solve
下面定义了一个交换两个值的函数,它没有使用泛型特性:
func swapTwoInts(inout a: Int, inout b: Int) { let temporaryA = a a = b b = temporaryA }
var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt) println("someInt is now \(someInt), and anotherInt is now \(anotherInt)") // prints "someInt is now 107, and anotherInt is now 3"
函数swapTwoInts只能用于整形,再定义两个函数:
func swapTwoStrings(inout a: String, inout b: String) { let temporaryA = a a = b b = temporaryA } func swapTwoDoubles(inout a: Double, inout b: Double) { let temporaryA = a a = b b = temporaryA }
3. 泛型方法 Generic Functions
泛型方法可以用于任何类型,将上面的方法使用泛型方法进行定义:
func swapTwoValues<T>(inout a: T, inout b: T) { let temporaryA = a a = b b = temporaryA }
比较他们的不同点:
泛型的版本使用了一个占位符(上面的函数是 T),表示实际的类型(Int, String, Double)。占位符 T 没有表明 T 的具体类型,仅仅表明了 a 和 b 都必须是相同的类型 T。T 的真正类型只有在 swapTwoValues 被调用时才确定。
尖括号 <> 用于表明 T 是一个占位符,代表某种类型。
调用上面定义的泛型函数:
var someInt = 3 var anotherInt = 107 swapTwoValues(&someInt, &anotherInt) // someInt is now 107, and anotherInt is now 3 var someString = "hello" var anotherString = "world" swapTwoValues(&someString, &anotherString) // someString is now "world", and anotherString is now "hello"
注意:Swift标准库中定义了泛型函数swap,与上面的函数功能相同。
4. Type Parameters
在上面swapTwoValues
的例子中,T 就是 Type Parameter。
一旦你指定了一个 type parameter,
未完待续
标签:
原文地址:http://www.cnblogs.com/actionke/p/4275253.html