我已经构建了一个基本的计时器应用程序,我正在尝试弄清楚如何在后台运行计时器。我已经尝试了签名和功能中的后台模式,但似乎不适合我。
我目前正在开发Xcode 12 beta 6。
- 代码**
struct ContentView: View {
@State var start = false
@State var count = 0
var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
ZStack {
// App content.
}
.onReceive(timer, perform: { _ in
if start {
if count < 15 {
count += 1
} else {
start.toggle()
}
}
})
}
}
如果你们中的任何人有任何关于更好地管理计时器的建议,请一定让我知道。谢谢。
2条答案
按热度按时间hfwmuf9z1#
当用户离开应用程序时,它会被挂起。当用户离开应用程序时,通常不会让计时器继续运行。我们不想在用户返回应用程序之前,为了更新一个不相关的计时器而耗尽用户的电池。
这显然意味着您不想使用“计数器”模式,而是在启动计时器时捕获
Date
,并保存它,以防用户离开应用:当应用程序启动时,检索保存的
startTime
:计时器现在不应该使用计数器,而是计算从开始时间到现在的时间:
就我个人而言,我会从
View
中抽象出计时器和持久性:然后视图可以只使用
Stopwatch
:FWIW,
UserDefaults
可能不是存储这个startTime
的正确位置。我可能会使用plist或CoreData或其他什么。但我希望尽可能简单地说明持久化startTime
的想法,以便当应用程序再次启动时,您可以让它看起来像是计时器在后台运行,即使它没有运行。7eumitmz2#