【发布时间】:2020-07-22 12:38:15
【问题描述】:
我的理解是,Combine 中的 CurrentValueSubject 发布者适合按需访问,而不是发出一次值的常规发布者。因此,我尝试在环境对象中使用一个来存储 HKWorkout 中燃烧的总能量,以便在 SwiftUI 视图中完成锻炼后访问它。使用下面的代码,我得到了编译器错误Cannot convert return expression of type 'AnyCancellable' to return type 'Double',所以我认为我需要进行某种类型的转换但无法弄清楚?
class WorkoutManager: NSObject, HKWorkoutSessionDelegate, HKLiveWorkoutBuilderDelegate, ObservableObject {
var finishedWorkoutTotalEnergyBurned = CurrentValueSubject<Double, Never>(0.0)
func stopWorkout() {
self.finishedWorkoutTotalEnergyBurned.value = unwrappedWorkout.totalEnergyBurned!.doubleValue(for: .kilocalorie())
}
}
struct SummaryView: View {
@StateObject var workoutManager = WorkoutManager()
var body: some View {
Text("\(getFinishedWorkoutTotalEnergyBurned())")
.navigationBarHidden(true)
//.navigationTitle("Workout Complete")
}
func getFinishedWorkoutTotalEnergyBurned() -> Double {
workoutManager.finishedWorkoutTotalEnergyBurned.sink(receiveValue: { $0 })
}
}
【问题讨论】:
标签: ios swift swiftui combine publisher