1

我有一个简单的计数器视图,带有一个触发计数功能的按钮。该变量count有一个@State属性,当值在 for 循环内发生变化时,它应该触发视图的更新。但是,当我按下按钮时,视图仅在函数完成执行后更新。

如何使for循环计算的每个步骤都反映到视图中?

提前致谢!

struct TestView: View {
    @State var count: Float = 0.0
    
    var body: some View {
       
       VStack {
            Text("\(count)")
            
            Button(action: {
                startCount()
            }) {
                Text("Start Count")
            }.padding()
        }
    }
    
    func startCount() {
        for _ in 0...10000 {
            count += 0.0001
        }
    }
}
4

1 回答 1

0

循环太快了。如果您想减慢它并想在屏幕上显示,请使用以下代码。在这里,我使用了一个全局队列来执行后台任务,当主队列可以处理时,我使用它来更新计数。另外,我添加了一种sleep(1)方法来休眠进程。

func startCount() {
    DispatchQueue.global().async {
        for _ in 0...10000 {
            DispatchQueue.main.async {
                count += 0.0001
                print(count)
            }
            sleep(1)
        }
    }
}
于 2020-11-24T13:07:46.710 回答