位置:首頁 > 高級語言 > Swift教學 > Swift泛型所解決的問題

Swift泛型所解決的問題

泛型所解決的問題

這裡是一個標準的,非泛型函數swapTwoInts,用來交換兩個Int值:

func swapTwoInts(inout a: Int, inout b: Int)
  let temporaryA = a
  a = b
  b = temporaryA
}

這個函數使用寫入讀出(in-out)參數來交換ab的值,請參考寫入讀出參數

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,就不得不寫更多的函數,如 swapTwoStringsswapTwoDoublesfunctions,如同如下所示:

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、 swapTwoStringsswapTwoDoubles函數功能都是相同的,唯一不同之處就在於傳入的變量類型不同,分彆是IntStringDouble

但實際應用中通常需要一個用處更強大並且儘可能的考慮到更多的靈活性單個函數,可以用來交換兩個任何類型值,很幸運的是,泛型代碼幫你解決了這種問題。(一個這種泛型函數後麵已經定義好了。)


注意:
在所有三個函數中,ab的類型是一樣的。如果ab不是相同的類型,那它們倆就不能互換值。Swift 是類型安全的語言,所以它不允許一個String類型的變量和一個Double類型的變量互相交換值。如果一定要做,Swift 將報編譯錯誤。