HealthKit開發教程之HealthKit的複合資料

大學霸發表於2015-05-06

HealthKit開發教程之HealthKit的複合資料

複合資料就是複合單位和值構成的資料。所謂複合單位就是由單位進行乘法、除法等得到的單位,如m/slb·ft等就是複合單位。本節將針對這些複合資料進行講解。

HealthKit的相乘得到的複合資料

在物理學中我們可能接觸過類似lb·ft(扭矩單位,扭矩是使物體發生轉動的一種特殊的力矩。)這樣的單位。這種單位我們可以看做是兩個單位相乘得到的複合單位。開發者如果想要在自己的程式中使用這種複合單位,首先需要對這種單位進行建立。建立這種單位需要使用到unitMultipliedByUnit(_:)方法,其語法形式如下:


  • func unitMultipliedByUnit(_ unit: HKUnit!) -> HKUnit!


其中,引數unit:用來指定被乘的單位。

【示例2-44HKUnit-unitMultipliedByUnit】下面顯示汽車中發電機的扭矩,以“磅.英尺”為單位。程式碼如下:


  • 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 footUnit = HKUnit.footUnit()                                                                                      //建立長度單位
  •         var poundUnit=HKUnit.poundUnit()                                                                               //建立質量單位
  •         var unitMultipliedByUnit=footUnit.unitMultipliedByUnit(poundUnit)          //相乘得到的複合單位
  •         var myForce=HKQuantity(unit: unitMultipliedByUnit, doubleValue: 100)
  •         println("汽車中發電機的扭矩為:\(myForce)")
  •     }
  • ……
  • }


此時執行程式,會看到如下的效果。


  • 汽車中發電機的扭矩為:100 lb·ft


HealthKit的相除得到的複合資料

在數學計算中,我們常常會遇到m/s這樣的單位。這種單位是由兩個單位相除得到的。如果開發者想要在自己的程式碼中使用這種單位。首先需要使用unitDividedByUnit(_:)方法實現對這種單位的建立,其語法形式如下:


  • func unitDividedByUnit(_ unit: HKUnit!) -> HKUnit!


其中,引數_ unit用來指定單位,此單位用來作為除數。

【示例2-45HKUnit-unitDividedByUnit】下面顯示使用者跑步的速度,以“米/秒”為單位。程式碼如下:


  • import UIKit
  • import HealthKit
  • class ViewController: UIViewController {
  •     override func viewDidLoad() {
  •         super.viewDidLoad()
  •         // Do any additional setup after loading the view, typically from a nib.
  •         let meters = HKUnit.meterUnit()                                                                   //建立長度單位
  •         let seconds = HKUnit.secondUnit()                                                             //建立時間單位
  •         let metersPerSecond = meters.unitDividedByUnit(seconds)            //相除得到的複合單位
  •         let speed=HKQuantity(unit: metersPerSecond, doubleValue: 2)
  •         println("小明跑步的速度為:\(speed)")
  •     }
  • ……
  • }


此時執行程式,會看到如下的效果。


  • 小明跑步的速度為:2 m/s


HealthKit的單位和整數的次方構成的複合資料

在求體積和麵積時,我們都會使用到m3m2這樣單位。這種單位是由單位和整數的次方構成的複合單位。如果開發者想要建立這種單位,就需要使用到unitRaisedToPower(_:)方法,其語法形式如下:


  • func unitRaisedToPower(_ power: Int) -> HKUnit!


其中,引數power是一個整數,用來指定次方。

【示例2-46HKUnit-unitRaisedToPower】下面顯示水池的體積,以“立方米”為單位。程式碼如下:


  • 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 meters = HKUnit.meterUnit()
  •         var cubicmeter=meters.unitRaisedToPower(3)        //單位和整數的次方構成的複合單位
  •         var pool=HKQuantity(unit: cubicmeter, doubleValue: 100)
  •         println("水池的體積為:\(pool)")
  •     }
  • ……
  • }


此時執行程式,會看到如下的效果。


  • 水池的體積為:100 m^3


HealthKit的倒數構成的複合單位

1/s這個單位為“赫茲”單位,它表示在1秒時間間隔內發生一個週期過程的頻率。類似於1/s這種單位就是由一個單位的倒數構成。如果想要在程式中使用這種單位,需要使用到reciprocalUnit()方法。reciprocalUnit()方法的功能就是對單位進行求倒數構成新的複合單位。其語法形式如下:


  • func reciprocalUnit() -> HKUnit!


【示例2-47HKUnit-reciprocalUnit】下面顯示在1秒時間間隔內發生一個週期過程的頻率,以“1/秒”為單位。程式碼如下:


  • 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 seconds = HKUnit.secondUnit()
  •         var secondsInverse = seconds.reciprocalUnit()                                            //由倒數構成的複合單位
  •         var frequency=HKQuantity(unit: secondsInverse, doubleValue: 50)
  •         println("在1秒時間間隔內發生一個週期過程的頻率為:\(frequency)")
  •     }
  • ……
  • }


此時執行程式,會看到如下的效果。


  • 在1秒時間間隔內發生一個週期過程的頻率為:50 1/s


本文選自:HealthKit開發快速入門教程大學霸資料,轉載請註明出處,尊重技術尊重IT人!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1625377/,如需轉載,請註明出處,否則將追究法律責任。

相關文章