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 將報編譯錯誤。