0

我有这个代码:

主视图

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 Pessoa:ObservableObject {
    var data:NSMutableArray
     init() {
        self.data = NSMutableArray()
        self.data.add("Btn")
    }
}

从第二个视图返回时如何更新主视图。

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

主要思想是这样的结构:

V1 -> v2 -> V3

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

4

1 回答 1

1

只是为了让您启动并运行,您可以使用@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 的链接...

于 2020-08-07T16:48:43.937 回答