in

inout引数 の Swift

1個の演習

inout引数について

関数の本体の中では、仮引数は変数ではなく定数として扱われます。仮引数の値を変更しようとすると、コンパイル時にエラーになります。 関数で仮引数の値を変更したい場合は、in-outパラメータを使い、値が変更されうることを明示する必要があります。

in-outパラメータを使うには、次の3つのポイントを押さえる必要があります。

  1. 関数定義では、仮引数の型注釈の中で:と型名の間にキーワードinoutを書き、in-outパラメータであることを明示する必要があります。
  2. in-outパラメータに渡す値は、定数ではなく変数として宣言されている必要があります。同様に、リテラルを渡すこともできません。
  3. 関数を呼び出すときは、変数名の前に&を付けて、変更可能であることを明示する必要があります。

これらを満たすと、関数はin-outパラメータのコピーを内部で作り、関数本体の指示に従ってそれを変更し、関数が戻るときに変更後の値を、渡された変数へ書き戻します。

func updateVersion(_ record: inout (version: Int, title: String)) {
  record.version += 1
}

var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)

// dbRecord is now (3, "Exercism")
in-outパラメータについては、ほかにも知っておきたいルールが2つあります。

1. in-outパラメータを持つ関数の内部では、in-outパラメータとして渡された変数を参照することはできません。
2. 同じ変数を、同じ関数の複数のin-outパラメータとして渡すことはできません。
   たとえば、`inoutFunc(&mutVar, &mutVar)`はコンパイルエラーになります。
GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

inout引数を学習する