Я пишу приложение на Swift 4, которое использует HealthKit от Apple. Я пытаюсь ввести показатель «VO2 Max», но не уверен, какую единицу использовать. В самом приложении «Здоровье» единица измерения указана как «мл / (кг * мин)», но я не вижу ничего подобного в документации Apple здесь. Мой код выглядит так. Что я должен поставить вместо ??? на второй строчке?

writeHKMetric = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.vo2Max)!
writeHKQuantity = HKQuantity.init(unit: HKUnit.???, doubleValue: 1)

(Для справки, код для записи, скажем, Cycling Distance выглядит следующим образом. Обратите внимание на «HKUnit.mile ()»)

writeHKMetric = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceCycling)!
writeHKQuantity = HKQuantity.init(unit: HKUnit.mile(), doubleValue: 1)

Когда я пытаюсь использовать другую метрику, скажем count , я получаю следующую ошибку:

2017-12-14 22:08:01.876935-0500 Stand Hours 2.0[478:76005] *** Terminating app due to uncaught exception '_HKObjectValidationFailureException', reason: 'HKQuantitySample 1 count  (2017-12-08 08:00:00 -0500 - 2017-12-08 08:00:00 -0500) requires unit of type Volume/Mass·Time. Incompatible unit: count'

Но я не знаю, как настроить мою единицу на «Объем / Масса * Время».

4
Nick Foster 15 Дек 2017 в 06:06

1 ответ

Лучший ответ

Развлечение с юнитами. HKUnit имеет методы для умножения и деления единиц.

Следующий код создает желаемый модуль.

let kgmin = HKUnit.gramUnit(with: .kilo).unitMultiplied(by: .minute())
let mL = HKUnit.literUnit(with: .milli)
let VO₂Unit = mL.unitDivided(by: kgmin)

let writeHKMetric = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.vo2Max)!
let writeHKQuantity = HKQuantity(unit: VO₂Unit, doubleValue: 1)
print(writeHKQuantity)

Выход:

1 мл / мин · кг

Менее увлекательное, но более простое решение (спасибо Аллану) для создания блока:

let VO₂Unit = HKUnit(from: "ml/kg*min")
6
rmaddy 16 Дек 2017 в 20:58