代码之家  ›  专栏  ›  技术社区  ›  Harish

将HealthKit数据添加为一个值

  •  1
  • Harish  · 技术社区  · 9 年前

    我正在使用 HealthKit 以生成样本查询数据,例如步数。然而,当我在我的设备上测试它时,我得到了一堆不同的结果。现在,由于我有来自不同来源和不同日期的结果,例如 [16 count, 50 count, .....] 。现在我想把所有的数据加在一个值中。我如何做到这一点?例如,如果我对 健康工具包 ,然后返回 [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 回复  |  直到 7 年前
        1
  •  1
  •   Javier Cadiz    9 年前

    你绝对可以用 HKSampleQuery ,你只需要保持 totalSum 变量并迭代每个值。

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

    统计查询对 匹配数量样本

    A. 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 这样做了,剩下的代码与你所知道的没有太大区别 香港样本查询 .

    查看 docs 为了进一步阅读,请查看 HKStatistics class 这提供了更多的选项来执行与前一个类似的统计计算。