https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
Parametry wejściowe i wyjściowe
Parametry funkcji są domyślnie stałymi. Próba zmiany wartości parametru funkcji w treści tej funkcji powoduje błąd w czasie kompilacji. Oznacza to, że nie można przez pomyłkę zmienić wartości parametru. Jeśli chcesz, aby funkcja modyfikowała wartość parametru i chcesz, aby te zmiany były trwałe po zakończeniu wywołania funkcji, zamiast tego zdefiniuj ten parametr jako parametr wejściowy.
Piszesz parametr in-out, umieszczając słowo kluczowe inout tuż przed typem parametru. Parametr in-out ma wartość, która jest przekazywana do funkcji, jest modyfikowana przez funkcję i przekazywana z powrotem z funkcji w celu zastąpienia oryginalnej wartości. Aby uzyskać szczegółowe omówienie zachowania parametrów wejściowych i wyjściowych i skojarzonych z nimi optymalizacji kompilatora, zobacz Parametry we-wy.
Możesz przekazać zmienną tylko jako argument dla parametru wejściowego-wyjściowego. Nie można przekazać stałej ani wartości literalnej jako argumentu, ponieważ stałych i literałów nie można modyfikować. Umieszczasz znak ampersand (&) bezpośrednio przed nazwą zmiennej, gdy przekazujesz ją jako argument do parametru wejściowego, aby wskazać, że może być modyfikowana przez funkcję.
UWAGA
Parametry wejściowe nie mogą mieć wartości domyślnych, a parametry zmienne nie mogą być oznaczone jako inout.
Oto przykład funkcji o nazwie swapTwoInts ( : :), która ma dwa wejściowe i wyjściowe parametry całkowite zwane a i b:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
Funkcja swapTwoInts ( : :) po prostu zamienia wartość b na a, a wartość a na b. Funkcja wykonuje tę zamianę, przechowując wartość a w tymczasowej stałej o nazwie tymczasowa A, przypisując wartość b do a, a następnie przypisując tymczasową A do b.
Możesz wywołać funkcję swapTwoInts ( : :) z dwiema zmiennymi typu Int, aby zamienić ich wartości. Zauważ, że nazwy someInt i anotherInt są poprzedzone ampersandem, gdy są przekazywane do funkcji 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"
Powyższy przykład pokazuje, że oryginalne wartości someInt i anotherInt są modyfikowane przez swapTwoInts ( : :), mimo że zostały pierwotnie zdefiniowane poza funkcją.
UWAGA
Parametry wejściowe i wyjściowe nie są tym samym, co zwracanie wartości z funkcji. Powyższy przykład swapTwoInts nie definiuje zwracanego typu ani nie zwraca wartości, ale nadal modyfikuje wartości someInt i anotherInt. Parametry wejściowe i wyjściowe to alternatywny sposób na wywołanie przez funkcję efektu poza zakresem jej treści.
public func getQuestionList(inout language: String) -> NSArray