while switch structs sintaxis functions for ciclo swift syntax immutability mutability

structs - switch en swift 3



Swift make parameter parameter mutable? (5)

¿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?


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 here .


En Swift simplemente agrega la palabra clave var 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 el capítulo "Funciones" del libro Swift (página 210 del iBook tal como está hoy).



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 se let por defecto, así que cámbialo a var si necesitas modificar el valor, es decir,

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


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)