根据孩子的更改在swiftUI视图中更改值

时间:2020-08-07 16:26:52

标签: swift swiftui swiftui-environment

我有此代码:

主视图

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

1 个答案:

答案 0 :(得分: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的链接...