将 HealthKit 数据添加到一个值中

Posted

技术标签:

【中文标题】将 HealthKit 数据添加到一个值中【英文标题】:Adding HealthKit Data into one value 【发布时间】:2016-01-31 16:09:51 【问题描述】:

我正在使用HealthKit 来制作步数等示例查询数据。然而,当我在我的设备上测试它时,我得到了一堆不同的结果。现在因为我有来自不同来源和不同日子的结果,例如[16 count, 50 count, .....]。现在我想将所有数据加起来为一个值。我将如何实现这一目标?例如,如果我对 HealthKit 进行示例查询,它返回 [15 count, 20 count] 我想要 15 + 20 以获得 35 个计数。我该怎么做?

这是我用来查询数据的代码:

func getStepsHealthData() 
    let stepsHealthDataQuery = HKSampleQuery(sampleType: stepsHealth, predicate: predicate, limit: Int(HKObjectQueryNoLimit), sortDescriptors: nil) 
        (query, results, error) in

        let stepsUnit = HKUnit.countUnit()
        for result in (results as? [HKQuantitySample])! 
            stepCount = result.quantity.doubleValueForUnit(stepsUnit)
        
    

    healthKitStore?.executeQuery(stepsHealthDataQuery)

【问题讨论】:

【参考方案1】:

你绝对可以用HKSampleQuery 做你想做的事,你只需要保留一个totalSum 变量并遍历每个值。

也就是说,有一个特定的查询类型专门用于您想做的事情,称为HKStatisticsQuery。根据文档:

统计查询对一组数据进行统计计算 匹配数量样本

getTotalSteps 函数可以这样完成:

func getTotalSteps() 

    let stepsType  = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!
    let stepsUnit  = HKUnit.countUnit()

    let sumOption = HKStatisticsOptions.CumulativeSum

    let statisticsSumQuery = HKStatisticsQuery(quantityType: stepsType, quantitySamplePredicate: nil,
        options: sumOption)
         (query, result, error) in
            if let sumQuantity = result?.sumQuantity() 

                let numberOfSteps = Int(sumQuantity.doubleValueForUnit(stepsUnit))
                print(numberOfSteps)
            
    

    healthStore.executeQuery(statisticsSumQuery)

HKStatisticsOptions.CumulativeSum 可以解决问题,剩下的代码与您所知道的 HKSampleQuery 并没有太大区别。

查看docs 以进一步阅读并查看HKStatistics class,它提供了更多选项来执行与上一个类似的统计计算。

【讨论】:

哇,我一直在为此苦苦挣扎!这非常有效。正是我需要的:)。 请注意,您通常应该更喜欢计算 HKStatistics 的查询,而不是自己手动汇总累积数据。统计查询会自动正确处理来自多个来源的重叠数据,这很难靠您自己完成。

以上是关于将 HealthKit 数据添加到一个值中的主要内容,如果未能解决你的问题,请参考以下文章

如何将逗号添加到数据框中的现有值中?熊猫

此 HealthKit 错误的原因是啥:“将样本添加到锻炼时发生错误”?

此 HealthKit 错误的原因是啥:“将样本添加到锻炼时发生错误”?

将位置和天气信息添加到 HealthKit Workout Session

将 HealthKit 添加到 Apple Watch 扩展后,应用标识符冲突

将 HealthKit 添加到 Apple Watch 扩展后,应用标识符冲突