Dentro do corpo de uma função, os parâmetros são tratados como constantes, não como variáveis; tentar modificar o valor de um parâmetro gera um erro em tempo de compilação. Se uma função quiser modificar o valor de um parâmetro, é preciso usar um parâmetro in-out para deixar essa mutabilidade explícita.
Para usar parâmetros in-out, é preciso ter certeza de três coisas:
inout entre o : e o nome do tipo na anotação de tipo do parâmetro.& na chamada da função, marcando explicitamente que ela pode ser modificada.Quando isso é feito, a função cria uma cópia interna do parâmetro in-out, modifica essa cópia conforme indicado no corpo da função e, quando retorna, copia o valor modificado de volta para a variável que foi passada.
func updateVersion(_ record: inout (version: Int, title: String)) {
record.version += 1
}
var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)
// dbRecord is now (3, "Exercism")
Existem mais algumas regras sobre parâmetros in-out que é bom você conhecer.
1. Dentro de uma função com parâmetros in-out, você não pode referenciar a variável que foi passada como parâmetro in-out.
2. A mesma variável não pode ser passada como vários parâmetros in-out na mesma função.
Por exemplo, `inoutFunc(&mutVar, &mutVar)` gera um erro de compilação.