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)
构造两个HKUnits然后执行单元数学来创建复杂单元:
HKUnit *mmolPerL = [[HKUnit moleUnitWithMetricPrefix:HKMetricPrefixMilli molarMass:HKUnitMolarMassBloodGlucose] unitDividedByUnit:[HKUnit literUnit]];
Run Code Online (Sandbox Code Playgroud)
在 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)
可以确认所提供的示例不起作用(每种排列),而替代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)