ジェネリクス 型指定の引数

/*
ジェネリクス
型指定の引数
*/
func swapTwoInts(a: inout Int, b: inout Int) {
    let c = a
    a = b
    b = c
}
var p = 1
var q = 2
swapTwoInts(a: &p, b: &q)
print("p = \(p), q = \(q)")
 
func swapTwoValues<T>(a: inout T, b: inout T) {
    let c = a
    a = b
    b = c
}
var r = 1.0
var s = 2.0
swapTwoValues(a: &p, b: &q)
print("p = \(p), q = \(q)")
swapTwoValues(a: &r, b: &s)
print("r = \(r), s = \(s)")
 
// 外部引数名省略
func swapTwoVal<T>(_ a: inout T, _ b: inout T) {
    let c = a
    a = b
    b = c
}
swapTwoVal(&p, &q)
print("p = \(p), q = \(q)")
swapTwoVal(&r, &s)
print("r = \(r), s = \(s)")