如何使用 Swift 在 healthkit 中访问锻炼的元数据

Posted

技术标签:

【中文标题】如何使用 Swift 在 healthkit 中访问锻炼的元数据【英文标题】:How to access metaData of workout in healthkit using Swift 【发布时间】:2016-07-19 07:37:11 【问题描述】:

我能够获得durationtotalEnergyBurned等活动的基本数据。 但是我怎样才能访问像 HKWasUserEntered startDate 这样的元数据呢?

这是我目前的代码

var predicate = HKQuery.predicateForWorkoutsWithWorkoutActivityType(HKWorkoutActivityType.Cycling)
 let sampleQuery = HKSampleQuery(sampleType: HKWorkoutType.workoutType(), predicate: predicate, limit: 0, sortDescriptors: [sortDescriptor])
     (sampleQuery, results, error ) -> Void in

        if let queryError = error 
            print( "There was an error while reading the samples: \(queryError.localizedDescription)")
        
        else
        
            print(results!)
          for samples: HKSample in results! 
                var workout: HKWorkout = (samples as! HKWorkout)
                print("workout Distance is \(workout.totalDistance)")
                print("workout Energy Burned is \(workout.totalEnergyBurned)")
                print("workout Duration in seconds is \(workout.duration)")

            
        
        completion(results,error)
    

    executeQuery(sampleQuery)

当我打印 results 时,我得到了这个回报

[(46)“健康”(9.3.2)元数据: HKWasUserEntered = 1; 2016-07-18 10:58:00 +0500 2016-07-18 11:58:00 +0500]

所以基本上我怎样才能从中获取HKWasUserEntered 和日期?

【问题讨论】:

【参考方案1】:

HKSample 上有一个 metadata 字典属性。您可以像这样打印值,例如:

print("workout was user entered \(workout.metadata[HKWasUserEntered])")

【讨论】:

我收到了 [HKworkout] 类型的错误值 has no member metadata【参考方案2】:

尝试以下方法:

print("was user entered --> \(workout.metadata?[HKMetadataKeyWasUserEntered])")

【讨论】:

【参考方案3】:

我了解如何使用元数据。

            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)
                    
                

【讨论】:

以上是关于如何使用 Swift 在 healthkit 中访问锻炼的元数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 在 iOS 中显示从 HealthKit 中检索到的 HKDocumentSample?

如何使用 Swift 查询 Healthkit 的平均心率

如何使用 Swift 查询 Healthkit 的平均心率

如何在 swift 3 中获取和更新 Healthkit 中的高度?

如何使用 Swift 从 iOS HealthKit 应用程序读取心率?

如何使用 Swift 从 iOS HealthKit 应用程序读取心率?