swift言語:In-Out parameters

概要

関数の引数は値コピーのため、値の変更は関数内でのみ反映されます。 もし、引数の値を変更したい場合には、引数の変数宣言の前に、inoutキーワードを追加する必要があります。 参考渡しになり関数から戻っても値の変更が保持されます。

// inoutパラメータを使った関数定義
func swapTwoInts(inout a: Int, inout _ b: Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// prints "someInt is now 107, and anotherInt is now 3"

Tupleを使った多値返値でも同じ事が実現できます。

var someInt = 3
var anotherInt = 107
func swapTwoIntsT(a: Int, b: Int) -> (a: Int, b: Int) {
    return (b,a)
}
print(swapTwoIntsT(someInt, b: anotherInt))

関連資料