【发布时间】:2020-12-06 17:53:00
【问题描述】:
我的应用从远程服务器获取模型数据。这个模型有一个带有 epoch 值的字段,SwiftUI 视图应该根据当前时间是否已经过了 epoch 来显示不同的视图。
模型如下所示。
struct Order: Decodable {
var expireAt : Int
func isExpired() -> Bool {
let epoch = Int(Date().timeIntervalSince1970)
return expireAt < epoch
}
}
视图如下所示。
struct OrderView: View {
@EnvironmentObject var rs : RemoteService
var body: some View {
if rs.hasOrder() {
NavigationView {
VStack {
if rs.Order != nil && rs.Order!.isExpired() {
Text("Your order has expired")
} else {
Text("Your order has not expired.")
}
}
}
} else {
Text("You don't have order yet!")
}
}
}
我想要实现的是,只要当前纪元时间超过模型的expireAt 阈值,视图就会自动更新。
实现这一目标的最佳方法是什么?我应该使用Timer 还是ObservableObject,还是两者都用?例如,使用ObservableObject 似乎需要对模型使用Class 而不是Struct,我不确定这是否是我想要实现的目标。
【问题讨论】:
-
您需要一个
ObservableObject来响应该事件并更新其@Published属性;使您的视图依赖于该属性。 如何捕获此事件取决于您的特定应用设计。可能是应用程序启动/恢复时设置的计时器
标签: swiftui