gpt4 book ai didi

ios - 如何在 SwiftUI 中将变量从一个 View 传递到另一个 View

转载 作者:行者123 更新时间:2023-11-28 23:26:45 25 4
gpt4 key购买 nike

我试图在 SwiftUI 中将一个变量从一个 View 传递到另一个 View 。我有一个重置按钮,我想在另一个 View 中将变量设置为零。

我已经尝试在 View 1 中创建一个新结构并在 View 2 中访问该变量。

// View 1

@State var count = MyNumber.number

// Body of app

Button(action: {self.count = self.count-10}) {
Text("-")
}
Text("\(count)")

struct MyNumber {
static var number = 0
}

// View 2

@State var countit = MyNumber.number

// Body

Button(action: {self.countit = 0}) {
Text("Reset")
}

View 1 中的文本仍然显示在 View 1 中计算的数字

最佳答案

如果 View2 正在 View1 中使用,您可以执行以下操作:

View 1:

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

编辑

如果它们是完全不同的 View 并且需要单一事实来源,您可以使用 observableObject/EnvironmentVariables。最好的方法是将环境变量添加到 ContentView 中,它首先在 SceneDelegate

中定义。

ContentView().environmentObject(SourceOfTruth())

这是真相来源:

class SourceOfTruth: ObservableObject{
@Published var count = 0
}

然后你可以将EnvironmentObjects用于其他 View :这是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")
}
}
}

关于ios - 如何在 SwiftUI 中将变量从一个 View 传递到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58454516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com