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

问题描述 投票:4回答:5

在iOS 8.2中的健康状况中添加了血糖值:https://support.apple.com/en-us/HT203113

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

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

HKUnit *mmolPerL = [HKUnit unitFromString:@"mmol<molar mass>/L"];
HKUnit *mmolPerL = [HKUnit unitFromString:@"mmol/L"];
ios objective-c health-kit
5个回答
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]];

7
投票

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

HKUnit *mmolPerL = [[HKUnit moleUnitWithMetricPrefix:HKMetricPrefixMilli molarMass:HKUnitMolarMassBloodGlucose] unitDividedByUnit:[HKUnit literUnit]];

2
投票

传递给HKUnit的unitFromString的“摩尔质量”:需要是一个十进制值,表示给定物质的摩尔质量(http://en.wikipedia.org/wiki/Molar_mass)。血糖的摩尔质量约为180.156(参见HKUnit.h中的HKUnitMolarMassBloodGlucose,以获得更精确的值)。要使用单位字符串构造它,您可以使用:

HKUnit * mmolPerL = [HKUnit unitFromString:@“mmol <180.156> / L”];


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

1
投票

这是Swift 4中的一个例子:

let mass = HKUnitMolarMassBloodGlucose
let mmolPerLiter = HKUnit.moleUnit(with: .milli, molarMass: mass).unitDivided(by: .liter())
© www.soinside.com 2019 - 2024. All rights reserved.