https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
Parâmetros de entrada e saída
Os parâmetros de função são constantes por padrão. Tentar alterar o valor de um parâmetro de função de dentro do corpo dessa função resulta em um erro em tempo de compilação. Isso significa que você não pode alterar o valor de um parâmetro por engano. Se você deseja que uma função modifique o valor de um parâmetro e deseja que essas alterações persistam após o término da chamada de função, defina esse parâmetro como um parâmetro de entrada e saída.
Você escreve um parâmetro in-out colocando a palavra-chave inout logo antes do tipo de um parâmetro. Um parâmetro de entrada e saída possui um valor que é passado para a função, é modificado pela função e é retornado para fora da função para substituir o valor original. Para obter uma discussão detalhada sobre o comportamento dos parâmetros de entrada e otimizações do compilador associadas, consulte Parâmetros de entrada.
Você só pode passar uma variável como argumento para um parâmetro in-out. Você não pode passar um valor constante ou literal como argumento, porque constantes e literais não podem ser modificados. Você coloca um e comercial (&) diretamente antes do nome de uma variável ao passá-lo como argumento para um parâmetro in-out, para indicar que ele pode ser modificado pela função.
NOTA
Parâmetros de entrada e saída não podem ter valores padrão e parâmetros variáveis não podem ser marcados como entrada.
Aqui está um exemplo de uma função chamada swapTwoInts ( : :), que possui dois parâmetros inteiros de entrada e saída chamados aeb:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
A função swapTwoInts ( : :) simplesmente troca o valor de b em a e o valor de a em b. A função executa essa troca armazenando o valor de a em uma constante temporária chamada temporaryA, atribuindo o valor de b a a e depois atribuindo temporaryA a b.
Você pode chamar a função swapTwoInts ( : :) com duas variáveis do tipo Int para trocar seus valores. Observe que os nomes de someInt e anotherInt são prefixados com um e comercial quando são passados para a função swapTwoInts ( : :):
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// Prints "someInt is now 107, and anotherInt is now 3"
O exemplo acima mostra que os valores originais de someInt e anotherInt são modificados pela função swapTwoInts ( : :), mesmo que tenham sido originalmente definidos fora da função.
NOTA
Parâmetros de entrada e saída não são iguais a retornar um valor de uma função. O exemplo swapTwoInts acima não define um tipo de retorno ou retorna um valor, mas ainda modifica os valores de someInt e anotherInt. Os parâmetros de entrada e saída são uma maneira alternativa de uma função ter um efeito fora do escopo de seu corpo.
public func getQuestionList(inout language: String) -> NSArray