【问题标题】:HealthKit Workout dataHealthKit 锻炼数据
【发布时间】:2020-05-16 10:08:32
【问题描述】:
我编写了这个函数来获取锻炼期间的摄氏度值。如何获取锻炼名称/心跳等?
func getWorkoutWeather(workout: HKWorkout) -> Double {
if let metadata = workout.metadata {
if let mataTemperature = metadata[HKMetadataKeyWeatherTemperature] {
if let quantityTemperature = mataTemperature as? HKQuantity {
let celsius = quantityTemperature.doubleValue(for: HKUnit.degreeCelsius())
print(celsius)
return celsius
}
}
}
【问题讨论】:
标签:
swift
xcode
healthkit
【解决方案1】:
我们需要为与锻炼相关的每种数据类型创建一个单独的查询。例如,要获取之前创建的锻炼的完整详细信息,我们需要单独查询距离、消耗的能量和心率等。
查询以获取Heart rate。
class func loadheartRateWorkouts(completion:
@escaping ([HKWorkout]?, Error?) -> Void) {
guard let heartRateType =
HKObjectType.quantityType(forIdentifier:
HKQuantityTypeIdentifier.heartRate) else {
fatalError("*** Unable to create a Heart rate type ***")
}
// Get all workouts that only came from this app.
let workoutPredicate = HKQuery.predicateForObjects(from: .default())
let startDateSort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)
let query = HKSampleQuery(sampleType: heartRateType,
predicate: workoutPredicate,
limit: 0,
sortDescriptors: [startDateSort]) { (sampleQuery, results, error) -> Void in
guard let heartRateSamples = results as? [HKQuantitySample] else {
// Perform proper error handling here.
return
}
// Use the workout's Heart rate samples here.
}
HKHealthStore().execute(query)
}
参考:Fetching samples from the Workout