HealthKit开发教程之HealthKit的辅助数据
在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据、压力类型数据、时间类型数据、温度类型数据、标量类型数据和电导率类型数据。本节将针对这6个辅助数据进行讲解。
HealthKit的体积类型数据
体积,或称容量、容积,几何学专业术语,是物件占有多少空间的量。体积单位可以用来测量物体的体积。由体积单位和值组成的数据就是体积类型的数据。体积单位可以分为:国际体积单位、英制体积单位和美制体积单位。
1.国际体积单位
体积的国际单位为“升”,符号为L。如果想要创建一个以“升”为单位的单位对象,需要使用到literUnit()方法,其语法形式如下:
- class func literUnit() -> Self!
【示例2-30:HKUnit-literUnit】下面显示一桶可乐的容量,以“升”为单位。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myUnit=HKUnit.literUnit()
- var myVolume=HKQuantity(unit: myUnit, doubleValue: 2.5)
- println("一桶可乐的容量为:\(myVolume)")
- }
- ……
- }
此时运行程序,会看到如下的效果。
- 一桶可乐的容量为:2.5 L
注意:“升”也是可以添加前缀的,此时需要使用到literUnitWithMetricPrefix(_:)方法,其语法形式如下:
- class func literUnitWithMetricPrefix(_ prefix: HKMetricPrefix) -> Self!
其中,prefix用来指定一个有效的度量前缀值,这些值就是表2-1中的内容。
【示例2-31:HKUnit-literUnitWithMetricPrefix】下面显示一桶可乐的容量,以“千升”为单位。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myUnit=HKUnit.literUnitWithMetricPrefix(HKMetricPrefix.Kilo)
- var myVolume=HKQuantity(unit: myUnit, doubleValue: 0.0025)
- println("一桶可乐的容量为:\(myVolume)")
- }
- ……
- }
此时运行程序,会看到如下的效果。
- 一桶可乐的容量为:0.0025 kL
2.英制体积单位
英制体积单位有两种:一种是液体盎司;另一种是品脱。以下就是对这两个单位的具体介绍。
(1)液体盎司
液体盎司是一种液体的计量单位。1英制液体盎司等于28.41毫升。如果开发者想要创建以“英制液体盎司”为单位的单位对象,需要使用到fluidOunceImperialUnit()方法,其语法形式如下:
- class func fluidOunceImperialUnit() -> Self!
(2)品脱
品脱是是容量的计量单位。1英制品脱等于20液体盎司。开发者要想创建以“英制品脱”为单位的单位对象,需要使用到pintImperialUnit()方法,其语法形式如下:
- class func pintImperialUnit() -> Self!
【示例2-32:HKUnit-pintImperialUnit】下面显示一桶可乐的容量,以“英制液体盎司”和“英制品脱”为单位。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- //创建以“英制液体盎司”为单位的数据
- var myfluidUnit=HKUnit.fluidOunceImperialUnit()
- var myfluidVolume=HKQuantity(unit: myfluidUnit, doubleValue: 88)
- println("一桶可乐的容量为:\(myfluidVolume)")
- //创建以“英制品脱”为单位的数据
- var mypintUnit=HKUnit.pintImperialUnit()
- var mypintVolume=HKQuantity(unit: mypintUnit, doubleValue: 4.4)
- println("一桶可乐的容量为:\(mypintVolume)")
- }
- ……
- }
此时运行程序,会看到如下的效果。其中,英制液体盎司被简写为fl_oz_imp;英制品脱被简写为pt_imp。
- 一桶可乐的容量为:88 fl_oz_imp
- 一桶可乐的容量为:4.4 pt_imp
3.美制体积单位
与英制体积单位一样,美制体积单位也有两种::一种是液体盎司;另一种是品脱。以下就是对这两个单位的具体介绍。
(1)液体盎司
美制液体盎司一般使用在美国等地,一般1美制液体盎司等于29.571毫升。开发者想要创建以“美制液体盎司”为单位的单位对象,需要使用到fluidOunceUSUnit()方法,其语法形式如下:
class func fluidOunceUSUnit() -> Self!
(2)品脱
与美制液体盎司一样,美制品脱一般使用在美国等地。开发者想要创建以“美制品脱”为单位的单位对象,需要使用到pintUSUnit()方法,其语法形式如下:
- class func pintUSUnit() -> Self!
【示例2-33:HKUnit-pintUSUnit】下面显示一桶可乐的容量,以“美制液体盎司”和“美制品脱”为单位。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- //创建以“美制液体盎司”为单位的数据
- var myfluidUnit=HKUnit.fluidOunceUSUnit()
- var myfluidVolume=HKQuantity(unit: myfluidUnit, doubleValue: 85)
- println("一桶可乐的容量为:\(myfluidVolume)")
- //创建以“美制品脱”为单位的数据
- var mypintUnit=HKUnit.pintUSUnit()
- var mypintVolume=HKQuantity(unit: mypintUnit, doubleValue: 4.4)
- println("一桶可乐的容量为:\(mypintVolume)")
- }
- ……
- }
此时运行程序,会看到如下的效果。其中,美制液体盎司被简写为fl_oz_us;美制品脱被简写为pt_us。
- 一桶可乐的容量为:85 fl_oz_us
- 一桶可乐的容量为:4.4 pt_us
HealthKit的压力类型数据
压力在物理学方面指垂直作用在物体表面上的力。压力单位是用于计量压力的标准。压力单位和值就组成了压力类型的数据。压力单位用两种,一种是国际压力单位;另一种是非国际压力单位。以下将对这两种压力单位进行讲解。
1.国际压力单位
压力的国际单位为帕斯卡,可简称帕,符号Pa。开发者想要创建以“帕斯卡”为单位的单位对象需要使用到pascalUnit()方法,其语法形式如下:
- class func pascalUnit() -> Self!
【示例2-34:HKUnit-pascalUnit】下面显示桌子所承受的压力,以“帕”为单位。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myUnit=HKUnit.pascalUnit()
- var deskPressure=HKQuantity(unit: myUnit, doubleValue: 500)
- println("桌子所承受的压力为:\(deskPressure)")
- }
- ……
- }
此时运行程序,会看到如下的效果。
- 桌子所承受的压力为:500 Pa
注意:在“帕斯卡”的前面也可以添加前缀,使其形成“千帕”等。为“帕斯卡”添加前缀需要使用到pascalUnitWithMetricPrefix(_:),其语法形式如下:
- class func pascalUnitWithMetricPrefix(_ prefix: HKMetricPrefix) -> Self!
其中,prefix用来指定一个有效的度量前缀值,这些值就是表2-1中的内容。
【示例2-35:HKUnit-pascalUnitWithMetricPrefix】下面显示桌子所承受的压力,以“千帕”为单位。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myUnit=HKUnit.pascalUnitWithMetricPrefix(HKMetricPrefix.Kilo)
- var deskPressure=HKQuantity(unit: myUnit, doubleValue: 0.5)
- println("桌子所承受的压力为:\(deskPressure)")
- }
- ……
- }
此时运行程序,会看到如下的效果。
- 桌子所承受的压力为:0.5 kPa
2.非国际压力单位
除了国际单位外,压力中还有3个常使用到的单位分别为:毫米汞柱、厘米水柱、大气压强。这3个压力单位并非国际单位。以下是对这3个单位的详细讲解。
(1)毫米汞柱
毫米汞柱即毫米水银柱(mmHg),是直接用水银柱高度的毫米数表示压强、压力值的单位。如果想要在你的程序中创建一个以“毫米汞柱”为单位的单位对象,需要使用到millimeterOfMercuryUnit()方法,其语法形式如下:
- class func millimeterOfMercuryUnit() -> Self!
(2)厘米水柱
厘米水柱是直接用水柱高度的厘米数表示压强、压力值的单位。如果想要在你的程序中创建一个以“厘米水柱”为单位的单位对象,需要使用到centimeterOfWaterUnit()方法,其语法形式如下:
- class func centimeterOfWaterUnit() -> Self!
【示例2-36:HKUnit-centimeterOfWaterUnit】下面显示桌子所承受的压力,以“毫米汞柱”和“厘米水柱”为单位。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- //创建以“毫米汞柱”为单位的数据
- var mymillimeterOfMercuryUnit=HKUnit.millimeterOfMercuryUnit()
- var deskmillimeterOfMercuryPressure=HKQuantity(unit: mymillimeterOfMercuryUnit, doubleValue: 5)
- println("桌子所承受的压力为:\(deskmillimeterOfMercuryPressure)")
- //创建以“厘米水柱”为单位的数据
- var mycentimeterOfWaterUnit=HKUnit.centimeterOfWaterUnit()
- var deskcentimeterOfWaterPressure=HKQuantity(unit: mycentimeterOfWaterUnit, doubleValue: 5)
- println("桌子所承受的压力为:\(deskcentimeterOfWaterPressure)")
- }
- ……
- }
此时运行程序,会看到如下的效果。其中,毫米汞柱被简写为mmHg;厘米水柱被简写为cmAq。
- 桌子所承受的压力为:5 mmHg
- 桌子所承受的压力为:5 cmAq
(3)大气压强
大气压强是在标准大气条件下海平面的气压,其值为101.325kPa,是压强的单位,记作atm。如果想要创建一个以“大气压强”为单位的单位对象,需要使用到atmosphereUnit(),其语法形式如下:
- class func atmosphereUnit() -> Self!
【示例2-37:HKUnit-atmosphereUnit】下面显示在标准大气条件下海平面的气压,以“大气压强”为单位的数据。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myUnit=HKUnit.atmosphereUnit()
- var seaPressure=HKQuantity(unit: myUnit, doubleValue: 5)
- println("在标准大气条件下海平面的气压为:\(seaPressure)")
- }
- ……
- }
此时运行程序,会看到如下的效果。
- 在标准大气条件下海平面的气压为:5 atm
HealthKit的时间类型数据
时间是测量时间所用的基本单位。时间单位与值就构成了时间类型的数据。时间单位可以分为国际时间单位和非国际时间单位两种。以下就是对它们的详细介绍。
1.国际时间单位
时间的国际单位为秒,符号是s。如果想要使用“秒”这个单位,首先需要对以“秒”为单位的单位对象进行创建,此时需要使用到secondUnit()方法,其语法形式如下:
- class func secondUnit() -> Self!
【示例2-38:HKUnit-secondUnit】下面显示用户做完家务的所需的时间,以“秒”为单位。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myUnit=HKUnit.secondUnit()
- var dothing=HKQuantity(unit: myUnit, doubleValue: 1200)
- println("小红做完家务的时间为:\(dothing)")
- }
- ……
- }
此时运行程序,会看到如下的效果。
- 小红做完家务的时间为:1200 s
注意:开发者可以使用secondUnitWithMetricPrefix(_:)方法为“秒”添加前缀,使其可以成为比秒更大或者更小的单位。其语法形式如下:
- class func secondUnitWithMetricPrefix(_ prefix: HKMetricPrefix) -> Self!
2.非国际时间单位
以下是对非国际时间单位的介绍。
(1)分钟
分钟是表示时间长度的单位,一分钟等于60秒。如果开发者想要创建一个以“分钟”为单位的单位对象,需要使用到minuteUnit()方法,其语法形式如下:
- class func minuteUnit() -> Self!
(2)小时
小时也是时间单位。它不是时间的国际单位制基本单位(时间的国际单位制基本单位是秒),而是与国际单位制基本单位相协调的辅助时间单位。一般1小时等于60分钟。如果开发者想要创建一个以“小时”为单位的单位对象,需要使用到hourUnit()方法,其语法形式如下:
- class func hourUnit() -> Self!
(3)天
天和小时一样,也是时间单位。一般1天等于24小时。如果开发者想要创建一个以“天”为单位的单位对象,需要使用到dayUnit()方法,其语法形式如下:
- class func dayUnit() -> Self!
【示例2-39:HKUnit-dayUnit】下面实现86400秒与分钟、小时、天之间的换算。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var secondUnit=HKUnit.secondUnit() //创建以“秒”为单位的单位对象
- var myData=HKQuantity(unit: secondUnit, doubleValue: 86400)
- var minuteUnit=HKUnit.minuteUnit() //创建以“分钟”为单位的单位对象
- println("86400秒=\(myData.doubleValueForUnit(minuteUnit))分钟")
- var hourUnit=HKUnit.hourUnit() //创建以“小时”为单位的单位对象
- println("86400秒=\(myData.doubleValueForUnit(hourUnit))小时")
- var dayUnit=HKUnit.dayUnit() //创建以“天”为单位的单位对象
- println("86400秒=\(myData.doubleValueForUnit(dayUnit))天")
- }
- ……
- }
此时运行程序,会看到如下的效果。
- 86400秒=1440.0分钟
- 86400秒=24.0小时
- 86400秒=1.0天
HealthKit的温度类型数据
温度(temperature)是表示物体冷热程度的物理量,微观上来讲是物体分子热运动的剧烈程度。度只能通过物体随温度变化的某些特性来间接测量。用来计量温度的标准被称为温度单位。温度单位与值共同构成温度类型的数据。温度单位可以分为摄氏温度、华氏温度、开尔文这3种。以下就是对这3种温度单位的介绍。
1.摄氏度
摄氏度是目前世界上使用较为广泛的一种温度单位。它指在1标准大气压下,纯净的冰水混合物的温度为0度,水的沸点为100度,其间平均分为100份,每一等份为1度,记作1℃。如果开发者想要创建一个以“摄氏度”为单位的单位对象,需要使用到degreeCelsiusUnit()方法,其语法形式如下:
- class func degreeCelsiusUnit() -> Self!
2.华氏度
虽然中国在内的世界上很多国家都使用摄氏度,但世界上也有其他国家使用华氏度。例如,美国、缅甸和利比里亚使用华氏度,而较少使用摄氏度。一般1华氏度等于-17.2222222摄氏度。如果开发者想要创建一个以“华氏度”为单位的单位对象,需要使用到degreeFahrenheitUnit()方法,其语法形式如下:
- class func degreeFahrenheitUnit() -> Self!
3.开尔文
开尔文温度是以绝对零度作为计算起点的温度。开尔文温度常用符号K表示,其单位为开尔文。一般1开尔文等于-272.15摄氏度。如果开发者想要创建以“开尔文”为单位的单位对象,需要使用到kelvinUnit()方法,其语法形式如下:
- class func kelvinUnit() -> Self!
【示例2-40:HKUnit-kelvinUnit】以不同的温度单位显示水的沸点。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- //创建以“摄氏度”为单位的数据
- var degreeCelsiusUnit=HKUnit.degreeCelsiusUnit()
- var boilingPointOfCelsius=HKQuantity(unit: degreeCelsiusUnit, doubleValue: 100)
- println("水的沸点为:\(boilingPointOfCelsius)")
- //创建以“华氏度”为单位的数据
- var degreeFahrenheitUnit=HKUnit.degreeFahrenheitUnit()
- var boilingPointOfFahrenhe=HKQuantity(unit:degreeFahrenheitUnit , doubleValue: 212)
- println("水的沸点为:\(boilingPointOfFahrenhe)")
- //创建以“开尔文”为单位的数据
- var kelvinUnit=HKUnit.kelvinUnit()
- var boilingPointOfkelvin=HKQuantity(unit:kelvinUnit , doubleValue: 373.15)
- println("水的沸点为:\(boilingPointOfkelvin)")
- }
- ……
- }
此时运行程序,会看到如下的效果。其中,摄氏度被简写为degC;华氏度被简写为degF;开尔文被简写为K。
- 水的沸点为:100 degC
- 水的沸点为:212 degF
- 水的沸点为:373.15 K
HealthKit的标量类型数据
标量(scalar),亦称“无向量”。有些物理量,只具有数值大小,而没有方向,部分有正负之分。物理学中,标量(或作纯量)指在坐标变换下保持不变的物理量。用通俗的说法,标量是只有大小,没有方向的量。衡量标量的单位在HealthKit中有两种:一种是计数的单位;另一种是百分比的单位。以下就是对这两个单位的详细介绍。
1.计数的单位
计数的单位在Healthkit中是最常见到的,如步数。如果想要创建一个计数的单位,需要使用到countUnit()方法,其语法形式如下:
- class func countUnit() -> Self!
【示例2-41:HKUnit-countUnit】下面显示用户一天所走的步数。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myCount=HKUnit.countUnit()
- var myWalkCount=HKQuantity(unit: myCount, doubleValue: 1000)
- println("小红一天行走的步数为:\(myWalkCount)")
- }
- ……
- }
此时运行程序,会看到如下的效果。其中,count就是就是计数时使用的单位。
- 小红一天行走的步数为:1000 count
2.百分比的单位
百分比是一种表达比例、比率或分数数值的方法,用“%”表示。如果想要创建一个百分比的单位对象,需要使用到percentUnit()方法,其语法形式如下:
- class func percentUnit() -> Self!
【示例2-42:HKUnit-percentUnit】下面显示今日股票指数上涨幅度。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myUnit=HKUnit.percentUnit()
- var myStockMarket=HKQuantity(unit: myUnit, doubleValue: 0.01)
- println("今日股票指数上涨\(myStockMarket)")
- }
- ……
- }
此时运行程序,会看到如下的效果。
- 今日股票指数上涨0.01 %
HealthKit的电导率类型数据
电导率是一个物理学概念。在介质中,该量与电场强度之积等于传导电流密度,也可以称为导电率。电导率的单位为“西门子”。如果开发者想要创建一个以“西门子”为单位的单位对象,需要使用到siemenUnit()方法,其语法形式如下:
- class func siemenUnit() -> Self!
【示例2-43:HKUnit-siemenUnit】下面显示工业废水的电导率。代码如下:
- import UIKit
- import HealthKit
- class ViewController: UIViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var myUnit=HKUnit.siemenUnit()
- var wastewater=HKQuantity(unit: myUnit, doubleValue: 1)
- println("工业废水的电导率为:\(wastewater)")
- }
- ……
- }
此时运行程序,会看到如下的效果。其中,西门子的简写为S。
- 工业废水的电导率为:1 S
注意:开发者可以使用siemenUnitWithMetricPrefix(_:)方法为“西门子”添加前缀,使其可以成为比“西门子”更大或者更小的单位。其语法形式如下:
- class func siemenUnitWithMetricPrefix(_ prefix: HKMetricPrefix) -> Self!
其中,prefix用来指定一个有效的度量前缀值,这些值就是表2-1中的内容。
本文选自:HealthKit开发快速入门教程大学霸资料,转载请注明出处,尊重技术尊重IT人!