All'interno del corpo di una funzione, i parametri sono trattati come costanti, non come variabili; provare a modificare il valore di un parametro genera un errore in fase di compilazione. Se una funzione vuole modificare il valore di un parametro, deve usare un parametro in-out per rendere esplicita questa mutabilità.
Per usare i parametri in-out, chi programma deve essere sicuro di tre cose:
inout tra : e il nome del tipo nell'annotazione di tipo del parametro.& nella chiamata alla funzione, segnalando esplicitamente che è modificabile.Quando si fa questo, la funzione crea una copia interna del parametro in-out, la modifica come indicato nel corpo della funzione e, quando la funzione restituisce, copia il valore modificato nella variabile che è stata passata.
func updateVersion(_ record: inout (version: Int, title: String)) {
record.version += 1
}
var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)
// dbRecord is now (3, "Exercism")
Ci sono un paio di regole aggiuntive da tenere presenti sui parametri in-out.
1. All'interno di una funzione con parametri in-out, non puoi fare riferimento alla variabile che è stata passata come parametro in-out.
2. La stessa variabile non può essere passata come più parametri in-out nella stessa funzione.
Ad esempio, `inoutFunc(&mutVar, &mutVar)` genera un errore di compilazione.