HKStatisticsQuery
Оператор импорта
Swift
import HealthKit
Objective C
@import HealthKit;
Доступность
Доступный в iOS 8.0 и позже.
Запросы статистики выполняют статистические вычисления по набору соответствия выборок количества. Запросы статистики могут вычислить минимум, максимум и среднее значение для дискретных количеств. Они могут также вычислить сумму для кумулятивных количеств. Для получения дополнительной информации о доступных типах количества и учиться, являются ли они дискретными или кумулятивными значениями, посмотрите константы идентификатора типа в Ссылке Констант HealthKit.
Можно использовать запросы статистики с выборками количества только. Если Вы хотите вычислить статистику по проверкам или выборкам корреляции, необходимо выполнить надлежащий запрос и обработать данные сами.
Запросы статистики являются неизменными. Их свойства установлены, когда они сначала создаются, и они не могут измениться.
Выполнение запросов статистики
Вы создаете демонстрационный запрос путем вызова initWithQuantityType:quantitySamplePredicate:options:completionHandler:
инициализатор. После того, как запрос инстанцируют, Вы выполняете его путем вызова хранилища HealthKit executeQuery:
метод. Этот метод выполняет запрос на анонимной очереди фоновых задач. Когда запрос завершен, он выполняет обработчик результатов на той же очереди фоновых задач (но не обязательно на том же потоке). Как правило, Вы диспетчеризируете эти результаты назад основной очереди для обновления пользовательского интерфейса.
Пример кода в Перечислении 1 создает запрос статистики и обрабатывает результаты. Эта функция взята от AAPLEnergyViewController.m
файл в Адаптации: Сохраните и Получите Данные HealthKit.
Swift
func fetchTotalJoulesConsumedWithCompletionHandler(
completionHandler:(Double?, NSError?)->()) {
let calendar = NSCalendar.currentCalendar()
let now = NSDate()
let components = calendar.components(.YearCalendarUnit |
.MonthCalendarUnit | .DayCalendarUnit, fromDate: now)
let startDate = calendar.dateFromComponents(components)
let endDate = calendar.dateByAddingUnit(.DayCalendarUnit,
value: 1, toDate: startDate, options: NSCalendarOptions(nil))
let sampleType = HKQuantityType.quantityTypeForIdentifier(
HKQuantityTypeIdentifierDietaryEnergyConsumed)
let predicate = HKQuery.predicateForSamplesWithStartDate(startDate,
endDate: endDate, options: .StrictStartDate)
let query = HKStatisticsQuery(quantityType: sampleType,
quantitySamplePredicate: predicate,
options: .CumulativeSum) { query, result, error in
if result != nil {
completionHandler(nil, error)
return
}
var totalCalories = 0.0
if let quantity = result.sumQuantity() {
let unit = HKUnit.jouleUnit()
totalCalories = quantity.doubleValueForUnit(unit)
}
completionHandler(totalCalories, error)
}
healthStore.executeQuery(query)
}
Objective C
- (void)fetchTotalJoulesConsumedWithCompletionHandler:(void (^)(double, NSError *))completionHandler {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
NSDate *startDate = [calendar dateFromComponents:components];
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];
HKQuantityType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryEnergyConsumed];
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];
HKStatisticsQuery *query = [[HKStatisticsQuery alloc] initWithQuantityType:sampleType quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) {
if (!result) {
if (completionHandler) {
completionHandler(0.0f, error);
}
return;
}
double totalCalories = [result.sumQuantity doubleValueForUnit:[HKUnit jouleUnit]];
if (completionHandler) {
completionHandler(totalCalories, error);
}
}];
[self.healthStore executeQuery:query];
}
Пример кода в Перечислении 1 определяет метод, вычисляющий полную энергию, расходуемую сегодня. Этот метод запускается путем вычисления запуска и даты окончания желаемого временного интервала. Этот метод производит 24-часовой период, запускающийся в предыдущую полночь. Затем, это определяет демонстрационный тип для диетической расходуемой энергии и предикат, отфильтровывающий любые выборки, не находящиеся в пределах желаемого временного интервала.
С демонстрационным типом и создаваемым предикатом, это создает запрос статистики. Этот запрос подводит итог общей суммы диетической энергии, расходуемой во время кадра требуемого времени. Как только вычисления сделаны, запрос вызывает свой обработчик результатов.
Проверки обработчика результатов, чтобы видеть, произошла ли ошибка. Если существует ошибка, она пасует назад ошибку к обработчику завершения. Иначе, это получает количество суммы из результатов и запрашивает его значение в джоулях. Тогда это пасует назад это значение к обработчику завершения.
После того, как блок обработчика результата определяется, запрос завершен. Пример кода просто выполняет этот запрос с помощью хранилища HealthKit.
-
init (quantityType:quantitySamplePredicate:options:completionHandler:) - initWithQuantityType:quantitySamplePredicate:options:completionHandler:
Инициализирует экземпляр запроса статистики, выполняющий указанные вычисления по соответствующим выборкам в хранилище HeathKit.
Объявление
Swift
init!(quantityType
quantityType
: HKQuantityType!, quantitySamplePredicatequantitySamplePredicate
: NSPredicate!, optionsoptions
: HKStatisticsOptions, completionHandlerhandler
: ((HKStatisticsQuery!, HKStatistics!, NSError!) -> Void)!)Objective C
- (instancetype)initWithQuantityType:(HKQuantityType *)
quantityType
quantitySamplePredicate:(NSPredicate *)quantitySamplePredicate
options:(HKStatisticsOptions)options
completionHandler:(void (^)(HKStatisticsQuery *query, HKStatistics *result, NSError *error))handler
Параметры
quantityType
Тип выборки для поиска. Этот тип должен быть экземпляром
HKQuantityType
класс. Вы не можете выполнить запросы статистики с помощью других демонстрационных типов.quantitySamplePredicate
Предикат, ограничивающий результаты, возвращенные запросом. Можно передать
nil
если Вы хотите выполнить статистическое вычисление по всем выборкам указанного типа.options
Список опций, определяющих тип статистических выполняемых вычислений и путь, которым объединяются данные из многократных источников. Для списка допустимых опций посмотрите
HKStatisticsOptions
.handler
Блок, который вызывают после статистических вычислений, завершен. Этот блок берет следующие параметры:
query
Ссылка на запрос, вызывая этот блок.
results
Объект статистики HealthKit, содержащий запрошенные статистические данные, или
nil
если происходит ошибка.error
Если ошибка происходит, этот параметр содержит объект, описывающий ошибку; иначе, это
nil
.Возвращаемое значение
Недавно инициализированный объект запроса статистики.
Обсуждение
После инстанцирования запроса вызовите
HKHealthStore
классexecuteQuery:
метод для выполнения этого запроса. Запросы работают на анонимной очереди фоновых задач. Как только запрос завершен, обработчик результатов выполняется на той же очереди фоновых задач (но не обязательно на том же потоке). Вы обычно диспетчеризируете эти результаты основной очереди обновить пользовательский интерфейс.Оператор импорта
Objective C
@import HealthKit;
Swift
import HealthKit
Доступность
Доступный в iOS 8.0 и позже.