https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
In-Out-Parameter
Funktionsparameter sind standardmäßig Konstanten. Der Versuch, den Wert eines Funktionsparameters aus dem Hauptteil dieser Funktion heraus zu ändern, führt zu einem Fehler bei der Kompilierung. Dies bedeutet, dass Sie den Wert eines Parameters nicht versehentlich ändern können. Wenn eine Funktion den Wert eines Parameters ändern soll und diese Änderungen nach Beendigung des Funktionsaufrufs beibehalten werden sollen, definieren Sie diesen Parameter stattdessen als In-Out-Parameter.
Sie schreiben einen In-Out-Parameter, indem Sie das Schlüsselwort inout direkt vor dem Typ eines Parameters platzieren. Ein In-Out-Parameter hat einen Wert, der an die Funktion übergeben, von der Funktion geändert und an die Funktion zurückgegeben wird, um den ursprünglichen Wert zu ersetzen. Eine ausführliche Beschreibung des Verhaltens von In-Out-Parametern und der damit verbundenen Compiler-Optimierungen finden Sie unter In-Out-Parameter.
Sie können nur eine Variable als Argument für einen In-Out-Parameter übergeben. Sie können keine Konstante oder einen Literalwert als Argument übergeben, da Konstanten und Literale nicht geändert werden können. Sie setzen ein kaufmännisches Und (&) direkt vor den Namen einer Variablen, wenn Sie es als Argument an einen In-Out-Parameter übergeben, um anzuzeigen, dass es von der Funktion geändert werden kann.
HINWEIS
In-Out-Parameter dürfen keine Standardwerte haben, und variable Parameter können nicht als Inout markiert werden.
Hier ist ein Beispiel für eine Funktion namens swapTwoInts ( : :), die zwei In-Out-Integer-Parameter mit den Namen a und b enthält:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
Die Funktion swapTwoInts ( : :) tauscht einfach den Wert von b in a und den Wert von a in b. Die Funktion führt diesen Austausch durch, indem sie den Wert von a in einer temporären Konstante namens temporalA speichert, a den Wert von b zuweist und dann b temporärA zuweist.
Sie können die Funktion swapTwoInts ( : :) mit zwei Variablen vom Typ Int aufrufen , um deren Werte auszutauschen . Beachten Sie, dass den Namen von someInt und anotherInt ein kaufmännisches Und vorangestellt wird, wenn sie an die Funktion swapTwoInts ( : :) übergeben werden:
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"
Das obige Beispiel zeigt, dass die ursprünglichen Werte von someInt und anotherInt durch die swapTwoInts ( : :) , obwohl sie ursprünglich außerhalb der Funktion definiert wurden.
HINWEIS
In-Out-Parameter sind nicht dasselbe wie die Rückgabe eines Werts von einer Funktion. Das obige Beispiel für swapTwoInts definiert keinen Rückgabetyp oder einen Wert, ändert jedoch die Werte von someInt und anotherInt. In-Out-Parameter sind eine alternative Möglichkeit für eine Funktion, eine Wirkung außerhalb des Bereichs ihres Funktionskörpers zu erzielen.
public func getQuestionList(inout language: String) -> NSArray