Dentro del cuerpo de una función, los parámetros se tratan como constantes, no como variables; si intentas modificar el valor de un parámetro, se producirá un error en tiempo de compilación. Si una función quiere modificar el valor de un parámetro, debe usar un parámetro in-out para hacer explícita esta mutabilidad.
Para usar parámetros in-out, hay que asegurarse de tres cosas:
inout entre el : y el nombre del tipo en la anotación de tipo del parámetro.& en la llamada a la función, lo que marca explícitamente que se puede modificar.Cuando se hace esto, la función crea una copia interna del parámetro in-out, la modifica según lo indicado en el cuerpo de la función y, cuando la función termina, vuelve a copiar el valor modificado en la variable que se pasó.
func updateVersion(_ record: inout (version: Int, title: String)) {
record.version += 1
}
var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)
// dbRecord is now (3, "Exercism")
Hay un par de reglas adicionales que conviene conocer sobre los parámetros in-out.
1. Dentro de una función con parámetros in-out, no puedes hacer referencia a la variable que se pasó como parámetro in-out.
2. La misma variable no se puede pasar como varios parámetros in-out en la misma función.
Por ejemplo, `inoutFunc(&mutVar, &mutVar)` produce un error del compilador.