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

  • 相关阅读:
    String、Stringbuilder、StringBuffer之间的练习与区别
    JAVA——重点非阻塞模型:NIO模型及IO操作步骤
    JAVA——IO模型分类
    SpringBoot(六) SpringBoot使用汇总(持续更新)
    Java高级(一) Future机制
    SpringBoot(二) 事务
    Java8(七) 新的DateTime API
    Java8(六) Optional
    Java8(五) 接口默认方法
    Java8(四) StreamAPI
  • 原文地址:https://www.cnblogs.com/daxueba-ITdaren/p/4479608.html
Copyright © 2020-2023  润新知