根据他的 child 中所做的更改更改 swiftUI 视图中的值

change a value inside a swiftUI view based in a change made in his child

我有这个代码:

主视图

import SwiftUI

struct ContentView: View {
    
   @EnvironmentObject var data:Pessoa
var body: some View {
    NavigationView{
        
        VStack{
            
            NavigationLink(destination:view2(data: data)){
                Text(data.data.firstObject as! String)
            }
        }
    }.environmentObject(data)
}
}

第二个视图

import SwiftUI

struct view2: View {
    
  var data:Pessoa
    
var body: some View {
    
    Button(action: {
        
        self.data.data[0] = "New btn Text"
    }){
        Text("Edit Btn Texr")
        
    }.environmentObject(data)
    
}
}

Class佩索阿

class Pessoa:ObservableObject {
    var data:NSMutableArray
     init() {
        self.data = NSMutableArray()
        self.data.add("Btn")
    }
}

当我 return 形成第二视图时如何更新主视图。

是的,我需要传递 object 或至少传递数组。

主要思想的结构如下:

V1 -> v2 -> V3

如果我在 V3 中更改 class 的某些参数,我如何将此更改(在布局中)传播到 v2 和 v1

只是为了让你起床 运行,你可以使用 @Published 属性 包装器,对于你的示例,你实际上不需要 @EnvironmentObject。您可以使用 @ObservedObject 代替...

class Pessoa: ObservableObject {
    @Published var data: Array<String>
    
    init() {
        self.data = Array()
        self.data.append("Btn")
    }
}
struct view2: View {
    
    var data: Pessoa
    
    var body: some View {
        
        Button(action: {
            
            self.data.data[0] = "New btn Text"
        }){
            Text("Edit Btn Texr")
            
        }
        
    }
}
struct ContentView: View {
    
    @ObservedObject var data = Pessoa()
    
    var body: some View {
        NavigationView{
            
            VStack{
                
                NavigationLink(destination:view2(data: data)){
                    Text(data.data.first ?? "N/A")
                }
            }
        }
    }
}

但是你应该检查 Joakim 的 link...