如果
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/环境变量。最好的方法是将环境变量添加到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")
}
}
}
View2
是否会在View1
中使用,或者你是在寻找一个全局的真相源? - 39fredycount
的值。 - iruleee