Swift泛型所解决的问题
泛型所解决的问题
这里是一个标准的,非泛型函数swapTwoInts
,用来交换两个Int值:
func swapTwoInts(inout a: Int, inout b: Int)
let temporaryA = a
a = b
b = temporaryA
}
这个函数使用写入读出(in-out)参数来交换a
和b
的值,请参考写入读出参数。
swapTwoInts
函数可以交换b
的原始值到a
,也可以交换a的原始值到b
,你可以调用这个函数交换两个Int
变量值:
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
println("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// 输出 "someInt is now 107, and anotherInt is now 3"
swapTwoInts
函数是非常有用的,但是它只能交换Int
值,如果你想要交换两个String
或者Double
,就不得不写更多的函数,如 swapTwoStrings
和swapTwoDoublesfunctions
,如同如下所示:
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
}
你可能注意到 swapTwoInts
、 swapTwoStrings
和swapTwoDoubles
函数功能都是相同的,唯一不同之处就在于传入的变量类型不同,分别是Int
、String
和Double
。
但实际应用中通常需要一个用处更强大并且尽可能的考虑到更多的灵活性单个函数,可以用来交换两个任何类型值,很幸运的是,泛型代码帮你解决了这种问题。(一个这种泛型函数后面已经定义好了。)
注意:
在所有三个函数中,a
和b
的类型是一样的。如果a
和b
不是相同的类型,那它们俩就不能互换值。Swift 是类型安全的语言,所以它不允许一个String
类型的变量和一个Double
类型的变量互相交换值。如果一定要做,Swift 将报编译错误。