首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在ObservableObject错误

是否存在ObservableObject错误
EN

Stack Overflow用户
提问于 2020-03-01 15:28:47
回答 1查看 66关注 0票数 1

当计数达到3时,我仍然有问题,重置函数只停止它,但是计数没有设置为0。我用了一个按钮的复位功能,它工作得很完美。我想理解它,并希望有人知道它的原因?

代码语言:javascript
复制
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()
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-01 16:09:52

这是因为resetbody构建过程中更改了影响UI的属性,因此被忽略了。应按以下方式更改

代码语言:javascript
复制
func reset() {
    waitingTimer.invalidate()
    DispatchQueue.main.async {
        self.waitingTimerCount = 0
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60476678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档