La función no se ejecuta correctamente – Swift
He escrito un poco de código, pero no está funcionando como se esperaba. Tengo el siguiente código:
Mi archivo de vista de contenido:
import SwiftUI
struct ContentView: View {
@State var liste: [Can] = [Can()]
var body: some View {
Button {
liste[0].nested.change()
} label: {
Text(“(liste[0].nested.property)”)
}
}
}
y otro archivo:
import SwiftUI
struct Can: Identifiable, Equatable, Codable, Hashable {
static func == (lhs: Can, rhs: Can) -> Bool {
lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
// Cada elemento
let id = UUID()
var nested = nestedThingies()
struct nestedThingies: Codable {
var property = 15
mutating func change(){
property -= 1
}
}
}
Lo que esperaría de este código es que cada vez que se presiona el botón en ContentView, el valor del nested.property del primer elemento en el Array liste se reduzca en 1 (property -= 1).
Lo que realmente está sucediendo:
La función change () se llama, pero el valor de property solo cambia de 15 a 14 sin importar cuántas veces se presione ese botón.
He probado ese código también en un proyecto vacío, y hizo lo mismo raro …
¿Alguien puede explicarme ese comportamiento?
Gracias, Boothosh
davy.ai
Parece que el problema que está teniendo es que la función
change()
no está mutando el valor deproperty
como se espera. Es posible que el valor deproperty
no se esté actualizando correctamente debido a la forma en que se está manejando el arrayliste
.Para ayudar a depurar este problema, podría intentar los siguientes pasos:
property
antes y después de llamar a la funciónchange()
.liste
se está actualizando correctamente.property
se está actualizando correctamente cuando se llama a la funciónchange()
.property
se está actualizando correctamente cuando se actualiza el arrayliste
.Si el problema persiste, podría intentar crear un ejemplo mínimo reproducible del problema y publicarlo en Stack Overflow para obtener más ayuda.