Ios 将HealthKit数据添加到一个值中

Ios 将HealthKit数据添加到一个值中,ios,swift,healthkit,hksamplequery,Ios,Swift,Healthkit,Hksamplequery,我正在使用HealthKit对步骤计数等数据进行示例查询。然而,当我在我的设备上测试它时,我得到了一系列不同的结果。现在,由于我有来自不同来源和不同日期的结果,例如[16计数,50计数,…]。现在我想把所有的数据相加成一个值。我将如何实现这一点?例如,如果我对HealthKit进行一个示例查询,它返回[15 count,20 count]我希望15+20得到35 count。我该怎么做 以下是我用来查询数据的代码: func getStepsHealthData() { let step

我正在使用
HealthKit
对步骤计数等数据进行示例查询。然而,当我在我的设备上测试它时,我得到了一系列不同的结果。现在,由于我有来自不同来源和不同日期的结果,例如
[16计数,50计数,…]
。现在我想把所有的数据相加成一个值。我将如何实现这一点?例如,如果我对
HealthKit
进行一个示例查询,它返回
[15 count,20 count]
我希望15+20得到35 count。我该怎么做

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

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)
}

使用
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
的代码没有太大区别


请查看,以便进一步阅读,还可以查看,它提供了更多选项来执行与上一个类似的统计计算。

哇,我一直在为此而奋斗!这很有效。这正是我所需要的:)。请注意,您通常应该更喜欢计算HKStatistics的查询,而不是手动对累积数据求和。统计查询会自动正确处理来自多个源的重叠数据,这很难单独完成。