Pregunta Swift make parameter parameter mutable?


¿Cómo puedo lidiar con este error sin crear una variable adicional?

func reduceToZero(x:Int) -> Int {
    while (x != 0) {
        x = x-1            // ERROR: cannot assign to 'let' value 'x'
    }
    return x
}

No quiero crear una variable adicional solo para almacenar el valor de x. ¿Es posible hacer lo que quiero?


73
2018-06-06 08:57


origen


Respuestas:


Como se indica en otras respuestas, a partir de Swift 3 colocando var antes de que una variable haya quedado obsoleta. Aunque no se menciona en otras respuestas, es la capacidad de declarar un parámetro inout. Piensa: pasando un puntero.

func reduceToZero(_ x: inout Int) {
    while (x != 0) {
        x = x-1     
    }
}

var a = 3
reduceToZero(&a)
print(a) // will print '0'

Esto puede ser particularmente útil en la recursión.

Las pautas de declaración de Apple se pueden encontrar aquí.


113
2018-05-03 00:43



Para Swift 1 y 2 (para Swift 3 ver respuesta por achi usando un parámetro inout): El argumento de una función en Swift es let por defecto, así que cámbialo a var si necesitas alterar el valor es decir,

func reduceToZero(var x:Int) -> Int {
    while (x != 0) {
        x = x-1     
    }
    return x
}

44
2018-06-06 09:04



Los parámetros 'var' están en desuso y se eliminarán en Swift 3. Asignar un nuevo parámetro parece ser la mejor manera ahora:

func reduceToZero(x:Int) -> Int {
    var x = x
    while (x != 0) {
        x = x-1            
    }
    return x
}

como se menciona aquí: Los parámetros 'var' están en desuso y se eliminarán en Swift 3


33
2018-04-04 10:16



Respuesta de Swift3 para pasar un puntero de matriz mutable.

Función:

func foo(array: inout Array<Int>) {
    array.append(1)
}

Llamada a la función:

var a = Array<Int>()
foo(array:&a)

9
2017-07-31 06:49



En Swift simplemente agregas el var palabra clave antes del nombre de la variable en la declaración de la función:

func reduceToZero(var x:Int) -> Int { // notice the "var" keyword
    while (x != 0) {
        x = x-1            
    }
    return x
}

Consulte la subsección "Parámetros constantes y variables" en Capítulo "Funciones" del libro de Swift (página 210 del iBook como es hoy).


7
2018-06-06 09:02