Если View2
используется в View1
, вы можете сделать что-то вроде этого:
View1:
struct FirstView: View {
@State var count = 0
var body: some View {
VStack{
Text("\(self.count)")
Button(action:
{self.count = self.count-10})
{
Text("-")
}
SecondView(count: self.$count)
}
}
}
И View2:
struct SecondView: View {
@Binding var count: Int
var body: some View {
Button(action: {self.count = 0}) {
Text("Reset")
}
}
}
Редактировать
Если они представляют собой совершенно разные представления и нуждаются в едином источнике правды, вы можете использовать observableObject / EnvironmentVariables. Лучше всего было бы добавить переменную окружения в ContentView
, где она впервые определена в SceneDelegate
ContentView().environmentObject(SourceOfTruth())
Вот SourceOfTruth:
class SourceOfTruth: ObservableObject{
@Published var count = 0
}
Тогда вы можете использовать EnvironmentObjects для других видов: Вот ContentView
:
struct ContentView: View {
@EnvironmentObject var truth: SourceOfTruth
var body: some View {
VStack {
FirstView()
SecondView()
}
}
}
Вот FirstView
:
struct FirstView: View {
@EnvironmentObject var truth: SourceOfTruth
var body: some View {
VStack{
Text("\(self.truth.count)")
Button(action:
{self.truth.count = self.truth.count-10})
{
Text("-")
}
}
}
}
Вот SecondView
:
struct SecondView: View {
@EnvironmentObject var truth: SourceOfTruth
var body: some View {
Button(action: {self.truth.count = 0}) {
Text("Reset")
}
}
}