使用变化的变量更新视图

问题描述 投票:1回答:1

我有这个带有SwiftUI的程序。该程序用于基于3个用户输入的机器学习来计算就寝时间。我有一个Text(“”)向用户显示他们更新的就寝时间。

我希望程序自动更新就寝时间,并将其显示在我的Text(“”)上。我尝试了许多方法,但似乎都没有用。到目前为止我尝试过的内容

  1. onAppear-仅在程序首次运行时就寝时间更新一次
  2. onTapGesture-仅在轻按选择器时更新就寝时间(滚动选择器不起作用,并且在某种程度上阻碍了更新步进器(单击+/-不会更改小时数)] >>
  3. 将didSet与符合observableObject的类,在类中的@Pulished var和在视图结构中的@ObservedObject一起使用。效果不佳,但仅在类具有默认值的情况下才尝试过
  4. 在结构中使用didSet-它没有更新就寝时间
  5. 有人知道是否有一种更简便的方法来更新就寝时间,但是用户滚动选择器并且只要变量发生变化?

UI looks for detail

struct ContentView: View {

    static var defaultWakeUpTime : Date {
        var defaultTime = DateComponents()
        defaultTime.hour = 7
        defaultTime.minute = 0
        return Calendar.current.date(from: defaultTime) ?? Date()
    }

    @State private var wakeUp = defaultWakeUpTime
    @State private var sleepAmount = 8.0
    @State private var coffeeAmount = 0 {
        didSet {
            calculateSleepTime()
        }
    }

    @State private var showTime : String = " "

    func calculateSleepTime() {**CONTENT**}

    var body: some View {
        NavigationView {
                VStack {
                    Spacer(minLength: 20)

                    Text("Your optimum sleep time is \(showTime)")

                    Spacer(minLength: 10)

                    Section {
                    Text("When do you want to wake up?")
                        .font(.headline)
                        DatePicker("Please choose a time", selection: $wakeUp, displayedComponents: .hourAndMinute)
                        .labelsHidden()
                        .datePickerStyle(WheelDatePickerStyle())
                    }

                Spacer()

                    Form {
                        Text("How many hours would you like to sleep?")
                            .font(.headline)
                        Stepper(value: $sleepAmount, in: 4...12, step: 0.25) {
                            Text("\(sleepAmount, specifier: "%g" ) hours")
                        }

                    }

                Spacer()

                    Section {
                        Text("How many cups of coffee do you drink?")
                            .font(.headline)

                        Picker("Coffee Selector", selection: $coffeeAmount) {
                            ForEach (1..<21) {
                                Text("\($0) " + "Cup")
                            }
                        }
                        .labelsHidden()
                    }
                }
                .navigationBarTitle(Text("BetterSleep"))
                .onAppear(perform: calculateSleepTime)
        }
    }
}
    

我有这个带有SwiftUI的程序。该程序用于基于3个用户输入的机器学习来计算就寝时间。我有一个Text(“”)向用户显示他们更新的就寝时间。我想要该程序...

swift static swiftui var
1个回答
0
投票

我将使用viewModel并使用订阅来跟踪值并计算睡眠时间。

© www.soinside.com 2019 - 2024. All rights reserved.