HealthKit开发教程之HealthKit的辅助数据

HealthKit开发教程之HealthKit的辅助数据

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人!

Comments are closed.