我是Swift的新手,我对一个问题感到绝望。我创建了一个类,其中有两个函数来启动和停止计时器。有一个结构体用onAppear启动计时器(启动函数)。在结构体中有一个按钮来停止时间。
import SwiftUI
class StopWatch: ObservableObject {
@Published var secondsElapsed = 0.0
var timer = Timer()
func startTimer() {
timer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
self.secondsElapsed += 0.1 }
}
func stopTimer() {
timer.invalidate()
}
}
struct Test: View {
@ObservedObject var stopWatch = StopWatch()
var body: some View {
VStack{
Button("Stop") {
stopWatch.stopTimer()
}
Text(String(format: "%.1f", self.stopWatch.secondsElapsed))
}.onAppear(perform: {stopWatch.startTimer()})
}
}
如果视图启动,计时器就会启动。到目前为止一切都很好:-)。但是我想去掉停止按钮,用一个if语句代替它,比如:
如果stopWatch.已用秒数〉5.0 { stopWatch.stopTimer()}
我想通过这个if语句在没有用户操作的情况下停止计时器,当前的计时器值应该会显示出来。
我尝试了几个小时,但我没有得到它。对于这种情况,我得到了错误消息“Type '()'不能符合'View'",但我尝试了很多其他的事情,并得到了很多其他的错误。有人能帮助我吗?
1条答案
按热度按时间jogvjijk1#
如果你想让计时器在5秒时停止,你应该在计时器的闭包中这样做。你可以这样做:
您会得到这个错误(“Type '()' cannot conformer to 'View'"),因为您尝试在SwiftUI视图的主体中执行代码而不返回视图。如果您出于某种原因确实想在主体中执行此操作,您可以这样做:(我不建议这样做)