¿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?
swift
syntax
immutability
mutability
Gabriel
fuente
fuente

Respuestas:
Como se indicó en otras respuestas, a partir de Swift 3 colocando var antes de que una variable haya quedado en desuso. Aunque no se indica en otras respuestas, es la capacidad de declarar un
inoutparámetro. Piensa: pasar un puntero.Esto puede ser particularmente útil en la recursividad.
Las
inoutpautas de declaración de Apple se pueden encontrar aquí .fuente
inoutLa palabra clave debe colocarse entre el nombre del parámetro y el tipo de parámetro de esta manera:func reduceToZero(x: inout Int)en la versión actual de Swift 3.Los parámetros 'var' están en desuso y se eliminarán en Swift 3. Por lo tanto, asignar a un nuevo parámetro parece ser la mejor manera ahora:
como se menciona aquí: los parámetros 'var' están en desuso y se eliminarán en Swift 3
fuente
xen el nuevovar x? ¿O Swift está haciendo algo más eficiente que eso?xcabe en el registro) prácticamente no hay costo. Si sextrata de una matriz, estructura u objeto que está mutado, es casi seguro que se debe realizar una copia (a menos que el optimizador pueda analizarlo en línea y alias).varargs que el usoinoutque puede tener efectos secundarios no deseados, especialmente. si la var fuera un puntero.Para Swift 1 y 2 (para Swift 3, vea la respuesta de achi usando un parámetro inout): El argumento de una función en Swift es
letpor defecto, así que cámbielo avarsi necesita alterar el valor, es decir,fuente
vares muy probable que los parámetros desaparezcan en las nuevas versiones de Swift según github.com/apple/swift-evolution/blob/master/proposals/…Respuesta Swift3 para pasar el puntero de matriz mutable.
Función:
Llamado a la función:
fuente
En Swift, simplemente agrega la
varpalabra clave antes del nombre de la variable en la declaración de función: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).
fuente
Hay algunos casos en los que no necesitamos usar
inoutPodemos usar algo como esto si desea que los cambios / alcance estén solo dentro de la función:
fuente
Solución usando Swift5 con programación funcional ...
fuente