如何解决使用SwiftUI中的发布者无法更新异步调用
我正在尝试加载HealthKit数据并在SwiftUI视图(对于Widget)中显示总距离和上次锻炼日期。我在打印语句中获取了数据,但是在下面的HTWidgetView中没有更新数据:
class WidgetViewModel: ObservableObject {
@Published var workoutDate: Date = Date()
@Published var totalDistance: Double = 0.0
func getWorkoutDataForWidget() {
WorkoutManager.loadWorkouts { (workouts,error) in
DispatchQueue.main.async {
guard let unwrappedWorkouts = workouts else { return }
if let first = unwrappedWorkouts.first {
self.workoutDate = first.startDate
}
let distancesFromWorkouts = unwrappedWorkouts.compactMap {$0.totalDistance?.doubleValue(for: .foot())}
let total = distancesFromWorkouts.sum()
self.totalDistance = total
print("TOtal Distance = \(total)")
}
}
}
}
extension Sequence where Element: AdditiveArithmetic {
func sum() -> Element { reduce(.zero,+) }
}
struct HTWidgetView: View {
@ObservedObject var viewModel: WidgetViewModel
var body: some View {
VStack {
Text("Last Workout = \(viewModel.workoutDate)")
Text("Total Distance")
Text("\(viewModel.totalDistance)")
}
.onAppear {
viewModel.getWorkoutDataForWidget()
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。