изменить значение внутри представления SwiftUI на основе изменения, внесенного в его дочернем элементе

#swift #swiftui #swiftui-environment

#swift #swiftui #swiftui-environment

Вопрос:

У меня есть этот код:

Основное представление

 import SwiftUI

struct ContentView: View {
    
   @EnvironmentObject var data:Pessoa
var body: some View {
    Navi&ationView{
        
        VStack{
            
            Navi&ationLink(destination:view2(data: data)){
                Text(data.data.firstObject as! Strin&)
            }
        }
    }.environmentObject(data)
}
}
  

2-й вид

 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)
    
}
}
  

Класс Pessoa

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

Как я могу обновить основное представление при возврате из 2-го представления.

Да, мне нужно передать объект или, по крайней мере, массив.

Основная идея заключается в структуре, подобной:

V1 -&&t; v2 -&&t; V3

если я внесу изменение в какой-либо параметр класса в версии V3, как я могу распространить (в макете) это изменение на версии v2 и v1

Ответ №1:

Просто чтобы запустить вас, вы могли бы использовать @Published оболочку свойств, которая для вашего примера вам на самом деле не нужна @EnvironmentObject . Вместо этого вы можете использовать @ObservedObject

 class Pessoa: ObservableObject {
    @Published var data: Array<Strin&&&t;
    
    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 {
        Navi&ationView{
            
            VStack{
                
                Navi&ationLink(destination:view2(data: data)){
                    Text(data.data.first ?? "N/A")
                }
            }
        }
    }
}
  

Но вам следует проверить ссылку Joakim…