首页 > 解决方案 > SwiftUI,计时器:计时器未触发

问题描述

我正在使用 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。对我来说,这意味着计时器从未启动?

标签: timerswiftuiwatchkit

解决方案


将您的计时器直接放在里面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)
}

推荐阅读