当计数达到3时,我仍然有问题,重置函数只停止它,但是计数没有设置为0。我用了一个按钮的复位功能,它工作得很完美。我想理解它,并希望有人知道它的原因?
import SwiftUI
import Combine
import Foundation
class WaitingTimerClass: ObservableObject {
@Published var waitingTimerCount: Int = 0
var waitingTimer = Timer()
func start() {
self.waitingTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
self.waitingTimerCount += 1 }}
func stop() { waitingTimer.invalidate() }
func reset() { waitingTimerCount = 0; waitingTimer.invalidate() }
}
struct ContentView: View {
@ObservedObject var observed = WaitingTimerClass()
var body: some View {
VStack {
Text("\(self.observed.waitingTimerCount)")
.onAppear { self.observed.start() }
.onReceive(observed.$waitingTimerCount) { count in
guard count == 3 else {return}
self.observed.reset() // does not work
}
Button(action: {self.observed.start()}) {
Text("Start") }
Button(action: {self.observed.reset()}) { // works
Text("Reset") }
Button(action: {self.observed.stop()}) {
Text("Stop") }
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}发布于 2020-03-01 16:09:52
这是因为reset在body构建过程中更改了影响UI的属性,因此被忽略了。应按以下方式更改
func reset() {
waitingTimer.invalidate()
DispatchQueue.main.async {
self.waitingTimerCount = 0
}
}https://stackoverflow.com/questions/60476678
复制相似问题