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).
Los parámetros ''var'' están en desuso y se eliminarán en Swift 3. Por lo tanto, la asignación a 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
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)