SwiftUI,定时器:定时器不触发
SwiftUI, Timer: Timer not firing
我正在使用 WatchKit 和 SwiftUI 构建 Apple Watch 应用程序。
在我的结构开始时,我正在初始化一个发布计时器:
struct ContentView: View {
@State var index: Int = 0
let timer = Timer.publish(every: 0.2, on: .main, in: .default)
var body: some View {
return AnyView(VStack{
Image(uiImage: images[index])
.resizable()
.frame(width: 50, height: 50, alignment: .center)
.onReceive(timer) { (_) in
self.index = self.index + 1
if self.index > images.count - 1 {
self.index = 0
}
debugPrint(self.index)
}
图片:[UIImage]!数组在另一个文件中全局定义(目前)。
第一张图片确实会立即显示。
现在图像既没有更新,也没有看到 self.index 的 debugPrint。
对我来说,这意味着计时器从未启动过?
我忘了将 .autoconnect() 添加到第 3 行:
let timer = Timer.publish(every: 0.2, on: .main, in: .default).autoconnect()
将计时器直接放在 onReceive()
内应该可行:
struct ContentView: View {
@State var index: Int = 0
var body: some View {
return AnyView(VStack{
Image(uiImage: images[index])
.resizable()
.frame(width: 50, height: 50, alignment: .center)
.onReceive(Timer.publish(every: 0.2, on: .main, in: .default)) { (_) in
self.index = self.index + 1
if self.index > images.count - 1 {
self.index = 0
}
debugPrint(self.index)
}
我正在使用 WatchKit 和 SwiftUI 构建 Apple Watch 应用程序。 在我的结构开始时,我正在初始化一个发布计时器:
struct ContentView: View {
@State var index: Int = 0
let timer = Timer.publish(every: 0.2, on: .main, in: .default)
var body: some View {
return AnyView(VStack{
Image(uiImage: images[index])
.resizable()
.frame(width: 50, height: 50, alignment: .center)
.onReceive(timer) { (_) in
self.index = self.index + 1
if self.index > images.count - 1 {
self.index = 0
}
debugPrint(self.index)
}
图片:[UIImage]!数组在另一个文件中全局定义(目前)。 第一张图片确实会立即显示。 现在图像既没有更新,也没有看到 self.index 的 debugPrint。 对我来说,这意味着计时器从未启动过?
我忘了将 .autoconnect() 添加到第 3 行:
let timer = Timer.publish(every: 0.2, on: .main, in: .default).autoconnect()
将计时器直接放在 onReceive()
内应该可行:
struct ContentView: View {
@State var index: Int = 0
var body: some View {
return AnyView(VStack{
Image(uiImage: images[index])
.resizable()
.frame(width: 50, height: 50, alignment: .center)
.onReceive(Timer.publish(every: 0.2, on: .main, in: .default)) { (_) in
self.index = self.index + 1
if self.index > images.count - 1 {
self.index = 0
}
debugPrint(self.index)
}