我想将浮点变量从一个视图传递到另一个新视图。
在下面的代码中,有一个名为 mhzValue 的浮点值,它是通过滑块设置的,滑块会更改该值,然后文本将显示在视图中。当用户点击导航按钮以显示新视图时,我希望能够获取 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
这可以通过 Bindings 轻松完成。由于
mhzValue
标记有 @State
属性包装器,因此它具有关联的 Binding。因此,您可以在 second视图中声明一个
@Binding
变量,并通过绑定到原始变量来初始化它。
struct NextView : View {
@Binding var mhzValue: Float
...
}
当您指定
NextView
作为导航按钮的目标时,请将其传递给 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
进行更改。
该值可以通过 init 传递。即
struct ViewToSendValue: View {
var body: some View {
ViewToReceiveValue(valueToPass: "some string")
}
}
struct ViewToReceiveValue: View {
var valueToPass: String = ""
init(valueToPass: String) {
self.valueToPass = valueToPass
}
var body: some View {
Text(valueToPass)
}
}
可以使用@State、@Binding、@EnvironmentObject 和@ObserevedObject 来快速传递数据。我在下面的链接中找到了详细的解释。 https://www.coderzheaven.com/2024/01/13/how-data-is-passed-from-one-view-to-another-in-swiftui/