将HealthKit数据添加到一个值中

时间:2016-01-31 16:09:52

标签: ios swift health-kit hksamplequery

我正在使用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 个答案:

答案 0 :(得分: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,它提供了更多选项来执行前一个统计计算。