https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
Parámetros de entrada y salida
Los parámetros de función son constantes por defecto. Intentar cambiar el valor de un parámetro de función desde dentro del cuerpo de esa función da como resultado un error en tiempo de compilación. Esto significa que no puede cambiar el valor de un parámetro por error. Si desea que una función modifique el valor de un parámetro y desea que esos cambios persistan después de que finalice la llamada a la función, defina ese parámetro como un parámetro de entrada-salida.
Escribe un parámetro in-out colocando la palabra clave inout justo antes del tipo de parámetro. Un parámetro de entrada-salida tiene un valor que se pasa a la función, es modificado por la función y se devuelve fuera de la función para reemplazar el valor original. Para obtener una descripción detallada del comportamiento de los parámetros de entrada y salida y las optimizaciones del compilador asociadas, consulte Parámetros de entrada y salida.
Solo puede pasar una variable como argumento para un parámetro de entrada-salida. No puede pasar una constante o un valor literal como argumento, porque las constantes y los literales no se pueden modificar. Coloca un ampersand (&) directamente antes del nombre de una variable cuando lo pasa como un argumento a un parámetro de entrada-salida, para indicar que la función puede modificarlo.
NOTA
Los parámetros de entrada y salida no pueden tener valores predeterminados y los parámetros variables no se pueden marcar como inout.
Aquí hay un ejemplo de una función llamada swapTwoInts ( : :), que tiene dos parámetros enteros de entrada y salida llamados ayb:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
La función swapTwoInts ( : :) simplemente intercambia el valor de b en a, y el valor de a en b. La función realiza este intercambio almacenando el valor de a en una constante temporal llamada temporalA, asignando el valor de b a a, y luego asignando temporalA a b.
Puede llamar a la función swapTwoInts ( : :) con dos variables de tipo Int para intercambiar sus valores. Tenga en cuenta que los nombres de someInt y anotherInt tienen el prefijo ampersand cuando se pasan a la función 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"
El ejemplo anterior muestra que los valores originales de someInt y anotherInt son modificados por la función swapTwoInts ( : :), aunque originalmente se definieron fuera de la función.
NOTA
Los parámetros de entrada y salida no son lo mismo que devolver un valor de una función. El ejemplo de swapTwoInts anterior no define un tipo de retorno ni devuelve un valor, pero aún modifica los valores de someInt y anotherInt. Los parámetros de entrada y salida son una forma alternativa de que una función tenga un efecto fuera del alcance de su cuerpo de función.
public func getQuestionList(inout language: String) -> NSArray