Dans le corps d'une fonction, les paramètres sont traités comme des constantes, et non comme des variables ; toute tentative de modification de la valeur d'un paramètre provoque une erreur de compilation. Si une fonction souhaite modifier la valeur d'un paramètre, elle doit utiliser un paramètre in-out pour rendre cette mutabilité explicite.
Pour utiliser des paramètres in-out, un programmeur doit être sûr de trois choses :
inout entre le : et le nom du type dans l'annotation de type du paramètre.& dans l'appel de la fonction, ce qui la marque explicitement comme modifiable.Une fois cela fait, la fonction effectue une copie interne du paramètre in-out, la modifie comme indiqué dans le corps de la fonction, puis recopie la valeur modifiée dans la variable qui a été transmise au moment où la fonction se termine.
func updateVersion(_ record: inout (version: Int, title: String)) {
record.version += 1
}
var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)
// dbRecord is now (3, "Exercism")
Il y a quelques règles supplémentaires à connaître concernant les paramètres _in-out_.
1. À l'intérieur d'une fonction qui prend des paramètres _in-out_, il est interdit de référencer la variable qui a été transmise comme paramètre _in-out_.
2. Une même variable ne peut pas être transmise comme plusieurs paramètres _in-out_ dans une même fonction. Par exemple, `inoutFunc(&mutVar, &mutVar)` provoque une erreur de compilation.