這里是一個標(biāo)準的,非泛型函數(shù)swapTwoInts,用來交換兩個Int值:
func swapTwoInts(inout a: Int, inout b: Int)
let temporaryA = a
a = b
b = temporaryA
}
這個函數(shù)使用寫入讀出(in-out)參數(shù)來交換a和b的值,請參考寫入讀出參數(shù)。
swapTwoInts函數(shù)可以交換b的原始值到a,也可以交換a的原始值到b,你可以調(diào)用這個函數(shù)交換兩個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函數(shù)是非常有用的,但是它只能交換Int值,如果你想要交換兩個String或者Double,就不得不寫更多的函數(shù),如 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函數(shù)功能都是相同的,唯一不同之處就在于傳入的變量類型不同,分別是Int、String和Double。
但實際應(yīng)用中通常需要一個用處更強大并且盡可能的考慮到更多的靈活性單個函數(shù),可以用來交換兩個任何類型值,很幸運的是,泛型代碼幫你解決了這種問題。(一個這種泛型函數(shù)后面已經(jīng)定義好了。)
注意:
在所有三個函數(shù)中,a和b的類型是一樣的。如果a和b不是相同的類型,那它們倆就不能互換值。Swift 是類型安全的語言,所以它不允許一個String類型的變量和一個Double類型的變量互相交換值。如果一定要做,Swift 將報編譯錯誤。