https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
Parametri in-out
I parametri della funzione sono costanti per impostazione predefinita. Il tentativo di modificare il valore di un parametro di funzione dall'interno del corpo di tale funzione genera un errore in fase di compilazione. Ciò significa che non è possibile modificare per errore il valore di un parametro. Se si desidera che una funzione modifichi il valore di un parametro e si desidera che tali modifiche persistano al termine della chiamata alla funzione, definire invece quel parametro come un parametro in-out.
Scrivi un parametro in-out posizionando la parola chiave inout subito prima del tipo di parametro. Un parametro in-out ha un valore che viene passato alla funzione, viene modificato dalla funzione e viene ritrasmesso fuori dalla funzione per sostituire il valore originale. Per una discussione dettagliata del comportamento dei parametri in-out e delle ottimizzazioni del compilatore associate, vedere In-Out Parameters.
È possibile passare una variabile solo come argomento per un parametro in-out. Non è possibile passare una costante o un valore letterale come argomento, perché costanti e letterali non possono essere modificati. Si inserisce una e commerciale (&) direttamente prima del nome di una variabile quando la si passa come argomento a un parametro in-out, per indicare che può essere modificata dalla funzione.
NOTA
I parametri in-out non possono avere valori predefiniti e i parametri variadic non possono essere contrassegnati come inout.
Ecco un esempio di una funzione chiamata swapTwoInts ( : :), che ha due parametri interi in-out chiamati aeb:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
La funzione swapTwoInts ( : :) scambia semplicemente il valore di b in a e il valore di a in b. La funzione esegue questo scambio memorizzando il valore di a in una costante temporanea chiamata temporaryA, assegnando il valore di b ad a, e quindi assegnando temporaryA a b.
Puoi chiamare la funzione swapTwoInts ( : :) con due variabili di tipo Int per scambiare i loro valori. Si noti che i nomi di someInt e anotherInt sono preceduti da una e commerciale quando vengono passati alla funzione 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"
L'esempio sopra mostra che i valori originali di someInt e anotherInt vengono modificati da swapTwoInts ( : :), anche se originariamente erano definiti al di fuori della funzione.
NOTA
I parametri in-out non sono la stessa cosa che restituire un valore da una funzione. L'esempio swapTwoInts precedente non definisce un tipo di ritorno o restituisce un valore, ma modifica comunque i valori di someInt e anotherInt. I parametri in-out sono un modo alternativo per una funzione di avere un effetto al di fuori dell'ambito del suo corpo di funzione.
public func getQuestionList(inout language: String) -> NSArray