在我的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年以来的时间间隔为双倍。我想在我的应用程序中显示相对时间。输出结果如下。
只有当我重新加载时,视图才会更新,而且每过一秒,它就会停留在 "10秒前"。如何实时更新它?我想每当当前日期(Date()
)的变化。
你可以使用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秒前,等等。