如何构建一个HealthKit HKUnit,以获得毫克/升(毫升/升)的血糖值?

cba*_*tel 4 objective-c ios healthkit

血压值在iOS 8.2中的Health中添加:https://support.apple.com/en-us/HT203113

如何构建一个HealthKit HKUnit,以获得毫克/升(毫升/升)的血糖值?

以下两个抛出异常:由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无法解析分解字符串...

HKUnit *mmolPerL = [HKUnit unitFromString:@"mmol<molar mass>/L"];
HKUnit *mmolPerL = [HKUnit unitFromString:@"mmol/L"];
Run Code Online (Sandbox Code Playgroud)

cba*_*tel 7

构造两个HKUnits然后执行单元数学来创建复杂单元:

HKUnit *mmolPerL = [[HKUnit moleUnitWithMetricPrefix:HKMetricPrefixMilli molarMass:HKUnitMolarMassBloodGlucose] unitDividedByUnit:[HKUnit literUnit]];
Run Code Online (Sandbox Code Playgroud)


Nat*_*ata 7

在 Swift 4 中:

let bloodGlucoseMgDlUnit = HKUnit.gramUnit(with: .milli).unitDivided(by: HKUnit.literUnit(with: .deci))
let bloodGlucoseMMolLUnit = HKUnit.moleUnit(with: .milli, molarMass: HKUnitMolarMassBloodGlucose).unitDivided(by: HKUnit.liter())

let mgdlValue = sample.quantity.doubleValue(for: bloodGlucoseMgDlUnit)
let mmollValue = sample.quantity.doubleValue(for: bloodGlucoseMMolLUnit)
Run Code Online (Sandbox Code Playgroud)

例子:

81.0 mg/dL, 4.4961063718806 mmol/L
83.0 mg/dL, 4.6071213440258 mmol/L
Run Code Online (Sandbox Code Playgroud)


Umb*_*ndi 3

可以确认所提供的示例不起作用(每种排列),而替代mg/dL单元却起作用。

总而言之,两种提议的方法都有效,在所得 HKUnit 的结构方面具有相似的结果(使用 @cbartel 提出的方法,常数实际上是四舍五入的,而不是其他的):

Printing description of mmolPerL->_baseUnits->_factors:
NSMapTable {
[6] mmol<180.15588> -> 1
[7] L -> -1
}
Run Code Online (Sandbox Code Playgroud)

我将使用提供的常量的较短形式:

HKUnit *mmolPerL = [HKUnit unitFromString:[NSString stringWithFormat:@"mmol<%f>/L",HKUnitMolarMassBloodGlucose]];
Run Code Online (Sandbox Code Playgroud)