https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
入出力パラメーター
関数パラメーターは、デフォルトでは定数です。関数の本体内から関数パラメーターの値を変更しようとすると、コンパイル時エラーが発生します。つまり、誤ってパラメーターの値を変更することはできません。関数でパラメーターの値を変更し、関数呼び出しの終了後もそれらの変更を保持する場合は、代わりにそのパラメーターを入出力パラメーターとして定義します。
inoutキーワードをパラメーターの型の直前に置くことにより、in-outパラメーターを記述します。入出力パラメーターには、関数に渡される値があり、関数によって変更され、元の値を置き換えるために関数から戻されます。入出力パラメーターの動作と関連するコンパイラーの最適化の詳細については、入出力パラメーターを参照してください。
変数は、入出力パラメーターの引数としてのみ渡すことができます。定数とリテラルは変更できないため、定数またはリテラル値を引数として渡すことはできません。アンパサンド(&)を変数として引数に入力パラメータに渡すときは、関数で変更できることを示します。
注意
入出力パラメーターにデフォルト値を設定することはできません。可変パラメーターは、入出力としてマークすることはできません。
次に、aとbと呼ばれる2つの入出力整数パラメータを持つswapTwoInts(: :) という関数の例を示します。
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
swapTwoInts(: :)関数は、単にbの値をaに、aの値をbにスワップします。この関数は、aの値をtemporaryAと呼ばれる一時定数に格納し、bの値をaに割り当て、temporalAをbに割り当てることによって、このスワップを実行します。
Int型の2つの変数を使用してswapTwoInts(: :)関数を呼び出すと、それらの値を交換できます。someIntとanotherIntの名前は、swapTwoInts(: :)関数に渡されるときに、アンパサンドが前に付けられることに注意してください。
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"
上記の例は、someIntとanotherIntの元の値がswapTwoInts(:関数の外部で定義されていたとしても :)関数ています。
注意
入出力パラメーターは、関数から値を返すことと同じではありません。上記のswapTwoIntsの例では、戻り値の型や値を定義していませんが、someIntとanotherIntの値を変更しています。入出力パラメーターは、関数がその関数本体のスコープ外で効果を持つための代替方法です。
public func getQuestionList(inout language: String) -> NSArray