Error de “self” utilizado antes de que todas las propiedades almacenadas estén inicializadas – @State – extensión – segundo archivo
Quiero desacoplar algunas vistas. Para este caso, he creado un inicializador para una vista con un argumento personalizado en una extensión en un segundo archivo. Desafortunadamente, obtengo este mensaje: “‘self’ utilizado antes de que todas las propiedades almacenadas estén inicializadas”.
Si pongo la vista y la extensión en el mismo archivo, funciona. Pero en este caso, el archivo de vista necesita conocer el argumento personalizado. Esto puede no ser necesario en otro proyecto.
Para simplificar, he creado un código de ejemplo que muestra el problema. ¿Cómo puedo inicializar la propiedad @State “name” en el inicializador de la extensión si la extensión está en otro archivo?
// ListCell.swift
import SwiftUI
struct ListCell: View {
@State var name: String
var count: Int
var body: some View {
HStack {
Text(name)
Text(": \(count)")
}
}
}
// ListCell+Ext.swift
import SwiftUI
extension ListCell {
init(name: String) {
self.name = name
count = 0
}
}
davy.ai
El problema es que la propiedad @State debe inicializarse antes de poder ser utilizada. Una solución sería mover la inicialización de la propiedad @State al inicializador en la extensión:
Esto inicializa la propiedad @State con el valor proporcionado en el parámetro name. Ten en cuenta que se accede a la propiedad @State con el prefijo guión bajo (_), y el parámetro initialValue se utiliza para establecer su valor inicial.
Con esta modificación, se puede inicializar la ListCell con el inicializador de la extensión en un archivo diferente: