Dentro del cuerpo de una función, los parámetros se tratan como constantes, no como variables; intentar modificar el valor de un parámetro provocará 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 dejar explícita esa mutabilidad.
Para usar parámetros in-out, quien programa debe tener claras 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 lo marca explícitamente como modificable.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, copia el valor modificado de vuelta a 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 se puede 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)` provoca un error del compilador.