SwiftUI 问题将变量传递给另一个视图

SwiftUI Question passing a variable to another view

我想将浮点变量从一个视图传递到另一个新视图。

在下面的代码中有一个名为 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 属性 包装器,所以它具有关联的绑定。因此,您可以在 second 视图中声明一个 @Binding 变量,并使用绑定到原始变量来初始化它。

struct NextView : View {
    @Binding var mhzValue: Float
    ...
}

当您将 NextView 指定为导航按钮的目的地时,将其传递给 mhzValue 的绑定。 (dollar-sign 语法是一种 shorthand 引用绑定的方式。)

struct ContentView : View {
    @State private var mhzValue : Float = 0
    ...
    NavigationButton(destination: NextView(mhzValue: self.$mhzValue)){...}
    ...
}

然后您可以在 NextView:

中使用 mhzValue
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)
        }
    }
}

您在 NextView 内对 mhzValue 所做的任何更改实际上都是对 ContentView.mhzValue 的更改。