gpt4 book ai didi

SwiftUI: View 模型内发布的字符串更改不会更新 View

转载 作者:行者123 更新时间:2023-11-30 10:28:52 25 4
gpt4 key购买 nike

我的 View 模型类中有一个计时器,它每秒更改 View 模型中的两个 @Published 字符串。 View 模型类是一个可观察对象,它由 View 观察,但对这些字符串对象的更改不会更新我的 View 。

我在许多其他 View 中有一个非常相似的结构(在 View 观察到的 ObservableObject 内发布的变量)并且它总是有效。我似乎找不到我做错了什么?

View 模型

final class QWMeasurementViewModel: ObservableObject {

@Published var measurementCountDownDetails: String = ""
@Published var measurementCountDown: String = ""

private var timer: Timer?
private var scheduleTime = 0

func setTimer() {
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
DispatchQueue.main.async {
self.scheduleTime += 1
if self.scheduleTime == 1 {
self.measurementCountDownDetails = "Get ready"
self.measurementCountDown = "1"
}
else if self.scheduleTime == 2 {
self.measurementCountDownDetails = "Relax your arm"
self.measurementCountDown = "2"
}
else if self.scheduleTime == 3 {
self.measurementCountDownDetails = "Breathe"
self.measurementCountDown = "3"
}
else if self.scheduleTime == 4 {
self.measurementCountDownDetails = ""
self.measurementCountDown = ""
timer.invalidate()
}
}
}
}
}

查看

struct QWMeasurementView: View {
@ObservedObject var viewModel: QWMeasurementViewModel

var body: some View {
VStack {
Text(viewModel.measurementCountDownDetails)
.font(.body)
Text(viewModel.measurementCountDown)
.font(.title)
}
.onAppear {
viewModel.setTimer()
}
}
}

编辑

经过调查,这似乎与它的呈现方式有关。因为如果它是单个 View ,则此代码可以工作,但我实际上将其呈现为一张表。 (仍然不明白为什么它会有所不同..)

struct QWBPDStartButtonView: View {

@ObservedObject private var viewModel: QWBPDStartButtonViewModel
@State private var startButtonPressed: Bool = false

init(viewModel: QWBPDStartButtonViewModel) {
self.viewModel = viewModel
}

var body: some View {
Button(action: {
self.startButtonPressed = true
}) {
ZStack {
Circle()
.foregroundColor(Color("midGreen"))
Text("Start")
.font(.title)
}
}
.buttonStyle(PlainButtonStyle())
.sheet(isPresented: $startButtonPressed) {
QWMeasurementView(viewModel: QWMeasurementViewModel())
}
}
}

最佳答案

您正在向工作 TableView 传递一个全新的 View 模型。尝试从第 3 行传入实例

关于SwiftUI: View 模型内发布的字符串更改不会更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com