使用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 (将#修改为@)