如何使用来自另一个视图 SWIFTUI 的变量值初始化 @State 变量

问题描述 投票:0回答:1

我需要使用来自另一个视图的值来初始化一个@State 变量。由于我的代码很长,我放一个简化的代码:

struct IconoLista: View {

    // MARK: Variables generales
       
    @State var listaElegida : Listas = Listas()
    var body: some View {
        VStack {
            NavigationLink("",destination: ProductosEnLista(listaElegida: self.listaElegida), tag: "ProductosEnLista", selection: $selectionLista)
            Button(action: {self.listaElegida = datosLista;self.selectionLista = "ProductosEnLista"})
            { 
                Image("personal")
                .resizable()
                .frame(alignment: .center)   
            }
            Text("Elegido")
                    .frame(alignment: .center)
                    .foregroundColor(.black)
                    .font(Font.system(size: 10.0, weight: .bold, design: .default))
        }
        .frame(width: 72, height: 100, alignment: .center)
    }
}

struct ProductosEnLista : View {
    var listaElegida : Listas

    @State var contenido : Array<Contenido> = Contenido().datos(idLista : listaElegida.id)
}

这条线是我的问题,因为正常情况下,直到我进入视图的主体(var body:一些视图),我没有可用的 listaElegida 的值。

@State var contenido : Array<Contenido> = Contenido().datos(idLista : listaElegida.id)

我已经尝试了我读过的所有内容,在第二个视图中做 listaElegida 作为@Binding,我尝试在 var 体内分配值:一些视图 都是错误

swiftui binding state property-wrapper
1个回答
0
投票

ProductosEnLista
中,您不能在
listaElegida
之前使用
ProductosEnLista
已完全初始化。这意味着,您不能在声明中使用
listaElegida
@State var contenido : Array<Contenido> = Contenido().datos(idLista : listaElegida.id)
.

要“解决”这个问题,您可以创建自己的

init(...)
(如评论中所述),确保
listaElegida
在你使用它来构建你的
contenido
.

之前被初始化
struct ProductosEnLista: View {
    var listaElegida: Listas
    @State var contenido: [Contenido]
    
    init(listaElegida: Listas) {
        self.listaElegida = listaElegida
        _contenido = State(initialValue: Contenido().datos(idLista: listaElegida.id))
    }
    
    var body: some View {
        Text("all good now")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.