在SwiftUI中实时更新相对时间

问题描述 投票:0回答:1

在我的SwiftUI应用中,我显示相对时间如下。

struct ContentView: View {

    let date: Double = 1589014112

    var body: some View {
        Text(Date(timeIntervalSince1970: date).relativeTime())
    }
}

extension Date {
    func relativeTime(in locale: Locale = .current) -> String {
        let formatter = RelativeDateTimeFormatter()
        formatter.unitsStyle = .full
        return formatter.localizedString(for: self, relativeTo: Date())
    }
}

我从一个API中得到1970年以来的时间间隔为双倍。我想在我的应用程序中显示相对时间。输出结果如下。

enter image description here

只有当我重新加载时,视图才会更新,而且每过一秒,它就会停留在 "10秒前"。如何实时更新它?我想每当当前日期(Date())的变化。

ios swift swiftui nsdateformatter
1个回答
1
投票

你可以使用TimerPublisher来周期性地触发一些东西。 下面是一个快速的例子。

struct PlaygroundView: View {

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

    let date = Date()

    @State var secondStr: String = ""

    var body: some View {
        Text(secondStr)
            .onReceive(timer) { (_) in
                self.secondStr = self.date.relativeTime()
            }
    }
}

extension Date {
    func relativeTime(in locale: Locale = .current) -> String {
        let formatter = RelativeDateTimeFormatter()
        formatter.unitsStyle = .full
        return formatter.localizedString(for: self, relativeTo: Date())
    }
}

你可以观察到 secondStr 每秒钟都在变化,比如1秒前 2秒前,等等。

© www.soinside.com 2019 - 2024. All rights reserved.