0

我在这里要做的是将“KarvonenVal”传递给另一个 SwiftUI 文件中的不同视图。我尝试过使用 .environmentObject 和 observableObject,但它们都不起作用。我的目标是在 SummaryView 上显示 KarvonenVal。感谢您的帮助。

值来自

struct CalcProcess: View{
    @Binding var NumAdded3:Bool
    @State var Age:Int
    @State var ExerciseIT:Int
    @State var ConstantNumber = 220
    @State var RHR:Int
    
    func karvonen(cn: Int, rhr: Int, age: Int, ei:Double) -> Double {
        return Double((cn-age-rhr)) * (ei / 10) + Double(rhr)
    }
    
    var body: some View {
        let output = karvonen(cn: ConstantNumber, rhr: RHR, age: Age, ei: Double(ExerciseIT))
        let roundedDouble = Double(round(1000*output)/1000)
        let KarvonenVal: String = String(format: "%.1f", roundedDouble)
           
        VStack{
            Text("\(KarvonenVal)")
                .foregroundStyle(.red)
        }
    }
}

到这里

struct SummaryView: View {
    @EnvironmentObject var workoutManager: WorkoutManager
    @Environment(\.dismiss) var dismiss

    var body: some View {
            ScrollView {
                VStack(alignment: .leading) {
                    SummaryMetricView(title: "Total Time",
                                      value: durationFormatter.string(from: workoutManager.workout?.duration ?? 0.0) ?? "")
                        .foregroundStyle(.yellow)
                    SummaryMetricView(title: "Avg. Heart Rate",
                                      value: workoutManager.averageHeartRate.formatted(.number.precision(.fractionLength(0))) + " bpm")
                        .foregroundStyle(.red)
                    SummaryMetricView(title: "Target Heart Rate",
                                      value: KarvonenVal + " bpm")
                        .foregroundStyle(.red)
                    Button("Done") {
                        dismiss()
                    }
                }
                .scenePadding()
            }
            .navigationTitle("Summary")
            .navigationBarTitleDisplayMode(.inline)
    }
}
4

1 回答 1

0

如果视图彼此不直接相关,那么参数方式绑定方式是不可能的,您需要一个两个视图都可以访问的公共类。

在你的情况下CalcProcess也声明

@EnvironmentObject var workoutManager: WorkoutManager

并将值——顺便说一句,即使在 SwiftUi 中变量名也应该以小写字母开头——传递给锻炼管理器。

但是,这需要将workoutManager其注入到更高级别的环境中,这SummaryView也是其后代。

于 2021-09-14T07:33:21.233 回答