SwiftUI 是苹果公司推出的一个用于构建用户界面的框架,它使用声明式编程的方式来描述用户界面。计时器(Timer)是 iOS 开发中常用的一种工具,用于在指定的时间间隔内执行某些操作。
在 SwiftUI 中使用计时器时,可能会遇到计时器不会在 0 处停止的问题。这通常是因为计时器的逻辑没有正确处理,导致计时器无法正确停止。
以下是一个示例代码,展示如何在 SwiftUI 中正确使用计时器并在 0 处停止:
import SwiftUI
import Combine
struct ContentView: View {
@State private var timerValue = 10
private var cancellable: AnyCancellable?
var body: some View {
VStack {
Text("Timer: \(timerValue)")
.font(.largeTitle)
.padding()
Button(action: {
startTimer()
}) {
Text("Start Timer")
.font(.title)
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
}
}
.onAppear {
startTimer()
}
.onDisappear {
stopTimer()
}
}
private func startTimer() {
cancellable = Timer.publish(every: 1, on: .main, in: .common)
.autoconnect()
.sink { [weak self] _ in
guard let self = self else { return }
if self.timerValue > 0 {
self.timerValue -= 1
} else {
self.stopTimer()
}
}
}
private func stopTimer() {
cancellable?.cancel()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
@State
属性包装器来管理计时器的值。startTimer
方法中,使用 Timer.publish
创建一个每秒触发一次的计时器,并通过 autoconnect
方法启动它。stopTimer
方法中,取消计时器的订阅。onAppear
和 onDisappear
方法中分别启动和停止计时器,确保计时器在视图出现和消失时正确管理。这个解决方案适用于需要在 SwiftUI 中使用计时器的各种应用场景,例如倒计时、定时任务等。
通过以上解决方案,可以确保计时器在 SwiftUI 中正确运行并在 0 处停止。
领取专属 10元无门槛券
手把手带您无忧上云