泛型代码可以让我们写出根据自我需求定义、适用于任何类型的,灵活且课重用的函数和类型。可以让我们避免重复的代码,用一种清晰和抽象的方式来表达代码的意图。
代码示例:
非泛型函数,交换两个Int 值:
var a = 30
var b = 50
func swapTwoInts(inout a: Int, inout _ b: Int) {
let temporaryA = a
a = b
b = temporaryA
}
swapTwoInts(&a , &b)
print(a) //输出 50
如果我们需要交换两个String值,还得写一个函数:
var a = "hello"
var b = "word"
func swapTwoString(inout a: String, inout _ b: String) {
let temporaryA = a
a = b
b = temporaryA
}
swapTwoString(&a , &b)
print(a) //输出 word
像这样,交换一种类型的值,就得写一个函数,而且 这些代码都是重复的。所以这时就可以使用泛型来解决代码重复的问题。
泛型函数
泛型函数 可以作用于任何类型。
使用泛型函数来实现值交换
func swapTwoValue<T>(inout a: T, inout _ b: T) {
let temporaryA = a
a = b
b = temporaryA
}
泛型函数使用占位符(通常使用 字母 T )来代替实际类型名(如Int,String,Double等)。占位符 没有明确的指示是什么类型,但是它提示a 和b 必须是同一类型,T的类型取决于传入参数的类型。
swift 标准库提供了值交换的函数swap(::),是一个泛型函数。
类型参数
如上面的泛型函数 占位符 就是一个类型参数,紧随函数名,并用尖括号括起来。类型参数,可用作函数参数的类型或者函数的返回值类型。
函数中用多个类型参数时,用逗号隔开
var a = 123
var b = "word"
func add<T,U>(a :T,b:U)->String{
return "\(a)"+"\(b)"
}
add(a, b: b)