如何在SwiftUI中使用计时器更新文本

Pin*_*Gjr 6 alert swift swiftui

我现在正在查看文本,我想每秒使用一次警报来更新该文本。

这是我完成的代码。

struct CountDownView : View {
    var body: some View {       
        VStack{
            Text("Update text with timer").lineLimit(nil).padding(20)

            }.navigationBarTitle(Text("WWDC"), displayMode:.automatic)
    }
}        
Run Code Online (Sandbox Code Playgroud)

jla*_*jla 12

使用合并:


struct CurrentDateView : View {
    @State var now = Date()

    let timer = Timer.publish(every: 1, on: .current, in: .common).autoconnect()

    var body: some View {
        Text("\(now)")
            .onReceive(timer) {
                self.now = Date()
            }
    }
}

Run Code Online (Sandbox Code Playgroud)

  • 真好 有关替代方法(相关),请参阅我的/sf/answers/3983395461/。 (2认同)
  • 如果您选择这条路线,则需要在切换视图时使计时器无效。否则,它会继续发射并产生意想不到的结果。 (2认同)

Pin*_*Gjr 8

我已经设法使用警报更新文本。

我已经声明了日期,State因此每当使用警报文本更改日期时也会更新。

struct CurrentDateView : View {
    @State var newDate = Date()

    let timer = Timer.publish(every: 1, on: .current, in: .common).autoconnect()

    var body: some View {
        Text("\(newDate)")
            .onReceive(timer) {
                self.newDate = Date()
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的。我在博客等上看到过这种方法,但这是错误的。 (2认同)