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



我现在有文本,我想每秒使用警报更新该文本。

这是我完成的代码。

struct CountDownView : View {
    var body: some View {       
        VStack{
            Text("Update text with timer").lineLimit(nil).padding(20)
            }.navigationBarTitle(Text("WWDC"), displayMode:.automatic)
    }
}        

使用 combine:

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()
            }
    }
}

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

我已将日期声明为 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()
            }
    }
}

原始样本位于:

https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-a-timer-with-swiftui

我确实使用这种方法定期更新我的一个电话......

另请参阅:

https://developer.apple.com/documentation/combine/replacing-foundation-timers-with-timer-publishers

struct ContentView: View {
@State var msg = ""
var body: some View {
    let timer = Timer.publish(every: 1, on: .current, in: .common).autoconnect()
    Text(msg)
        .onReceive(timer) { input in
            msg = MyManager.shared.ifo ?? "not yet received"
        }
}

}

确实必须以其他方式致电网络,但在这里我只是定期打电话给我的一些经理。

停止计时器(如来自hackingSwift的链接。您可以使用:

            self.timer.upstream.connect().cancel()

最新更新