在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"];
答案 0 :(得分:7)
构造两个HKUnits,然后执行单元数学以创建复杂单元:
HKUnit *mmolPerL = [[HKUnit moleUnitWithMetricPrefix:HKMetricPrefixMilli molarMass:HKUnitMolarMassBloodGlucose] unitDividedByUnit:[HKUnit literUnit]];
答案 1 :(得分:2)
可以确认提供的示例不起作用(每个排列),替代mg/dL
单位。
总而言之,两种提出的方法都有效,类似(使用@cbartel提出的方法,常量实际上是四舍五入的,而不是另一种)结果与结果HKUnit的结构有关:
Printing description of mmolPerL->_baseUnits->_factors:
NSMapTable {
[6] mmol<180.15588> -> 1
[7] L -> -1
}
我使用提供的常量使用较短的形式:
HKUnit *mmolPerL = [HKUnit unitFromString:[NSString stringWithFormat:@"mmol<%f>/L",HKUnitMolarMassBloodGlucose]];
答案 2 :(得分:2)
传递给HKUnit的unitFromString的“摩尔质量”:需要是一个十进制值,表示给定物质的摩尔质量(http://en.wikipedia.org/wiki/Molar_mass)。血糖的摩尔质量约为180.156(参见HKUnit.h中的HKUnitMolarMassBloodGlucose,以获得更精确的值)。要使用单位字符串构造它,您可以使用:
HKUnit * mmolPerL = [HKUnit unitFromString:@“mmol&lt; 180.156&gt; / L”];
答案 3 :(得分:2)
在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)
示例:
81.0 mg/dL, 4.4961063718806 mmol/L
83.0 mg/dL, 4.6071213440258 mmol/L
答案 4 :(得分:1)
这是Swift 4中的一个例子:
let mass = HKUnitMolarMassBloodGlucose
let mmolPerLiter = HKUnit.moleUnit(with: .milli, molarMass: mass).unitDivided(by: .liter())