2016-01-31 3 views
1

Я использую HealthKit, чтобы сделать пример данных запроса, таких как количество шагов. Однако, когда я тестирую его на своем устройстве, я получаю кучу разных результатов. Теперь, поскольку у меня есть результаты из разных источников и разных дней, таких как [16 count, 50 count, .....]. Теперь я хочу добавить все данные в одно значение. Как я могу это достичь? Например, если я делаю образец запроса до HealthKit, и он возвращает [15 count, 20 count] Я хочу 15 + 20, чтобы получить 35 отсчетов. Как мне это сделать?Добавление данных HealthKit в одно значение

Вот код, который я использовал для запроса данных:

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, который предоставляет больше возможностей для выполнения статистических расчетов, подобных предыдущему.

+0

Вау, я боролся с этим навсегда! Это сработало отлично. Только то, что мне нужно :). – Harish

+0

Обратите внимание, что вы обычно предпочитаете запросы, которые вычисляют HKStatistics, вместо того, чтобы выполнять собственное суммирование суммарных данных вручную. Статистические запросы автоматически обрабатывают перекрывающиеся данные из нескольких источников правильно, что трудно сделать с вашей стороны. – Allan

 Смежные вопросы

  • Нет связанных вопросов^_^