1

我正在使用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)
}
4

1 回答 1

1

你绝对可以用 a 做你想做的事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 类,它提供了更多选项来执行与前一个类似的统计计算。

于 2016-01-31T18:42:59.903 回答