我想将Float变量从一个视图传递到另一个新视图。
在下面的代码中,有一个称为mhzValue的Float值,该值是通过Slider设置的,滑块会更改该值,然后Text将显示在视图中。当用户点击Navigation Button来显示新视图时,我希望能够使用mhzValue并将其显示在文本框中的新视图中,并将其设置为另一个变量。
希望有道理。
请在下面查看一些示例代码。
谢谢。
克雷格
import SwiftUI struct ContentView : View { @State private var mhzValue : Float = 0 var body: some View { // Navigation View NavigationView { VStack{ Text("Test Value:") .font(.headline) .color(.blue) .padding(.leading, -180.0) //Get Slider Value Slider(value: $mhzValue, from: 1, through: 55, by: 1) .padding(.horizontal) //Display Slider Value Text("\(Int(mhzValue)) Value") .font(.title) .fontWeight(.semibold) .color(.blue) // Naviagtion Button and send value of mhzValue to new View NavigationButton(destination: NextView()){ Image(systemName: "plus.square.fill") .foregroundColor(.white) .font(/*@START_MENU_TOKEN@*/.title/*@END_MENU_TOKEN@*/) .frame(width: 150.0, height: 16.0) .padding(15) .background(Color.red) .cornerRadius(10.0) } } } } } // New View to show Slider Value struct NextView : View { var body: some View { Text("Display Slider Value Here:") } } #if DEBUG struct ContentView_Previews : PreviewProvider { static var previews: some View { ContentView() } } #endif
Christopher .. 6
使用Bindings可以很容易地做到这一点。因为mhzValue
标记有@State
属性包装器,所以它具有关联的Binding。因此,您可以@Binding
在第二个视图中声明一个变量,并使用绑定到原始变量对其进行初始化。
struct NextView : View { @Binding var mhzValue: Float ... }
当您指定NextView
为导航按钮的目的地时,将Binding传递给mhzValue
。(美元符号语法是引用绑定的一种简便方法。)
struct ContentView : View { @State private var mhzValue : Float = 0 ... NavigationButton(destination: NextView(mhzValue: self.$mhzValue)){...} ... }
然后,您可以mhzValue
在内部使用NextView
:
struct NextView : View { @Binding var mhzValue: Float var body: some View { VStack{ Text("Display Slider Value Here:") Text("\(Int(mhzValue)) Value") .font(.title) .fontWeight(.semibold) .color(.blue) } } }
你做出的任何更改mhzValue
内NextView
将有效地改变ContentView.mhzValue
。
使用Bindings可以很容易地做到这一点。因为mhzValue
标记有@State
属性包装器,所以它具有关联的Binding。因此,您可以@Binding
在第二个视图中声明一个变量,并使用绑定到原始变量对其进行初始化。
struct NextView : View { @Binding var mhzValue: Float ... }
当您指定NextView
为导航按钮的目的地时,将Binding传递给mhzValue
。(美元符号语法是引用绑定的一种简便方法。)
struct ContentView : View { @State private var mhzValue : Float = 0 ... NavigationButton(destination: NextView(mhzValue: self.$mhzValue)){...} ... }
然后,您可以mhzValue
在内部使用NextView
:
struct NextView : View { @Binding var mhzValue: Float var body: some View { VStack{ Text("Display Slider Value Here:") Text("\(Int(mhzValue)) Value") .font(.title) .fontWeight(.semibold) .color(.blue) } } }
你做出的任何更改mhzValue
内NextView
将有效地改变ContentView.mhzValue
。