从 SwiftUI 中的另一个视图设置 @State var

and*_*ewz 3 state swiftui

我试图从 struct的 var 设置 struct 的var@State中的 var值,但它不起作用。我需要使用var 因为我将它作为绑定传递。前任:aAbB@State

struct A : View {
  @State var myBindableVar = ""
  var body : some View {
     TextField(self.$myBindableVar) ...
  }
}

struct B : View {
  @State var a : A
  var body : some View {
     Button(action: { self.a.myBindableVar = "???" }) { ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

myBindableVar未设置"???"为点击按钮时。为什么?

Kuh*_*ann 5

您需要使用@Binding来实现这一点。这是一些示例代码。我让视图 B 出现在视图 A 内,以便您可以直接在屏幕上看到工作结果:

struct A : View {
  @State var myBindableVar = ""
  var body : some View {
    VStack {
     Text(myBindableVar)
    Spacer()
    B(myBindableVar: $myBindableVar)
    }
  }
}

struct B : View {
  @Binding var myBindableVar : String
  var body : some View {
    Button(action: { self.myBindableVar = "Text appears" }) {
        Text("Press to change")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)