HealthKit開發快速入門教程之HealthKit數據的操做

HealthKit開發快速入門教程之HealthKit數據的操做

數據的表示

HealthKit中,數據是最核心的元素。經過分析數據,人們能夠看到相關的健康信息。例如,經過統計步數數據,人們能夠知道一天走的步數。本章將主要講解HealthKit數據構成的方式,以及如何規範的表達一個數據。ide

2.1  數據的操做

HealthKit中,數據都是與單位和值組成的,如圖2.1所示。此圖爲一個睡眠分析的截圖。在此圖中59m就表明了一個數據。其中m爲單位,59爲基於單位的數值。本節將講解數據的建立、判斷、比較以及獲取等內容。spa

2.1  睡眠分析orm

2.1.1  建立數據

HealthKit中數據都是由單位和值構成的。在使用數據以前,首先須要對數據進行建立。本小節將講解數據建立的兩個步驟:建立單位和建立基於單位的數據。對象

1.建立單位教程

HealthKit中,爲了讓數據具備實際物理意義,因此須要爲數據中的值指定單位。HKUnit提供了便捷方法來建立HealthKit支持的全部基本單位。HKUnit是一個類。當咱們要具體的使用它時,就須要對其進行實例化。實例化HKUnit須要使用到init(fromString:)方法。它能夠用來對單位進行建立,而且此單位有一個描述性的字符串,其語法形式以下:ci

  • convenience init!(fromString string: String!)開發

其中,string是一個字符串,用來表明單位。此字符串必需要符合HealthKit所支持的全部基本單位。Healthkit所支持的基本單位如附錄B所示。字符串

【示例2-1HKUnit-init】下面建立一個以米爲單位的對象。代碼以下:get

  • import UIKitstring

  • 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(fromString: "m")                                                       //建立單位對象

  •         println(myunit)

  •     }

  • ……

  • }

此時運行程序,會看到以下的效果。

  • m

2.建立基於單位的數據

HKQuantity類存儲了給定單位的值,此值和單位就構成了數據。和HKUnit類同樣,在使用它時,須要進行實例化。實例化HKQuantity須要使用到init(unit:doubleValue:)方法。它能夠用來建立一個quantity(數量)對象。其語法形式以下:

  • convenience init!(unit unit: HKUnit!,

  •       doubleValue value: Double)

其中,unit用來指定一個單位對象;value用來指定基於單位的值,它是一個雙精度類型的數據。

【示例2-2HKQuantity-init】下面表示某一我的在一段時間內所走的路程。代碼以下:

  • 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(fromString: "km")                                                //建立長度單位

  •         var mydistance=HKQuantity(unit: myunit, doubleValue: 10)    //建立長度數據對象

  •         println("一段時間後,某人行走的路程爲:\(mydistance)")   

  • }

  • ……

  • }

此時運行程序,會看到以下的效果。

  • 一段時間後,某人行走的路程爲:10 km

2.1.2  判斷、比較數據

比較和判斷是數據處理的基本操做。例如,經過比較的操做,可讓用戶找出一組數據的最大值。本小節將詳細講解數據的判斷以及比較。

1.判斷單位是否爲空

不少的單位有如m/s的狀況,若是當兩個單位同樣時,此單位就會抵消,變爲一個空的單位。爲了不這種狀況的發生,HealthKit提供了一個isNull()方法。此方法用來判斷建立的單位是否爲空,其語法形式以下:

  • func isNull() -> Bool

其中,該方法的返回值類型爲布爾類型。當Booltrue時,表示建立的單位爲空;當Boolfalse時,表示建立的單位不爲空。

【示例2-3HKUnit-isNull】下面判斷給定的單位是否爲空。代碼以下:

  • 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 unit1:HKUnit=HKUnit(fromString: "m/m")

  •         //判斷

  •         if((unit1.isNull()) == true){

  •             println("unit1對象爲空")

  •         }else{

  •             println("unit1對象不爲空")

  •         }

  •         var unit2=HKUnit(fromString: "m/s")

  •         //判斷

  •         if((unit2.isNull()) == true){

  •             println("unit2對象爲空")

  •         }else{

  •             println("unit2對象不爲空")

  •         }

  •     }

  • ……

  • }

此時運行程序,會看到以下的效果。

  • unit1對象爲空

  • unit2對象不爲空

2.判斷數據的兼容性

同類型單位和單位之間是能夠進行轉換的,如以米爲單位的數據和釐米爲單位的數據,以千克爲單位的數據和以克爲單位的數據等。而兼容性就是用來判斷數據和提供的單位之間是否能夠進行轉換。在HealthKitisCompatibleWithUnit(_:)方法能夠用來對數據的兼容性進行判斷,其語法形式以下:

  • func isCompatibleWithUnit(_ unit: HKUnit!) -> Bool

其中,unit用來指定一個單位對象。該方法的返回值類型爲布爾類型。當Booltrue時,表示quantity對象和提供的單位相兼容;當Boolfalse時,表示quantity對象和提供的單位不兼容。

【示例2-4HKQuantity-isCompatibleWithUnit】判斷某人行走的路程是否能夠與給定的單位進行轉換。代碼以下:

  • 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 unit1=HKUnit(fromString: "km")                                                   //建立一個長度單位

  •         var distance=HKQuantity(unit: unit1, doubleValue: 10)                          //建立一個長度數據對象

  •         var unit2=HKUnit(fromString: "m")                                                     //建立第二個長度單位

  •         //判斷兼容

  •         if(distance.isCompatibleWithUnit(unit2)){

  •             println("distanceunit2兼容")

  •         }else{

  •             println("distanceunit2不兼容")

  •         }

  •         var unit3=HKUnit(fromString: "s")                                                                //建立一個時間單位

  • //判斷兼容

  •         if(distance.isCompatibleWithUnit(unit3)){

  •             println("distanceunit3兼容")

  •         }else{

  •             println("distanceunit3不兼容")

  •         }

  • ……

  • }

此時運行程序,會看到以下的效果。

  • distanceunit2兼容

  • distanceunit3不兼容

3.比較數據

同簡單的數值同樣,數據也能夠進行比較的。在HealthKit中提供了compare(_:)方法,能夠實現數據的比較功能,其語法形式以下:

  • func compare(_ quantity: HKQuantity!) -> NSComparisonResult

其中,quantity用來指定一個數量對象。該方法的返回值類型爲NSComparisonResult枚舉類型,其語法形式以下:

  • enum NSComparisonResult : Int {

  •     case OrderedAscending

  •     case OrderedSame

  •     case OrderedDescending

  • }

其中,OrderedAscending表示左邊的數據小於右邊的數據;OrderedSame表示兩個數據相等;OrderedDescending表示右邊的數據小於左邊的數據。

【示例2-5HKQuantity-compare】下面對一我的4天的行走距離進行比較。代碼以下:

  • 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 unit1=HKUnit(fromString: "km")                                                   //建立一個公里單位

  •         var distance1=HKQuantity(unit: unit1, doubleValue: 10)               //建立第一天行走距離對象

  •         var unit2=HKUnit(fromString: "m")                                                     //建立一個米單位

  •         var distance2=HKQuantity(unit: unit2, doubleValue: 10000)                 //建立次日行走距離對象

  •         var distance3=HKQuantity(unit: unit2, doubleValue: 10)               //建立第三天行走距離對象

  •         var distance4=HKQuantity(unit: unit2, doubleValue: 500)            //建立第四天行走距離對象

  •         //比較大小

  •         if(distance1.compare(distance2)==NSComparisonResult.OrderedSame){

  •             println("兩天所走的路程同樣")

  •         }

  •         //比較大小

  •         if(distance3.compare(distance2)==NSComparisonResult.OrderedAscending){

  •             println("2天走的要比第3天走的要多")

  •         }

  •         //比較大小

  •         if(distance4.compare(distance3)==NSComparisonResult.OrderedDescending){

  •             println("3天走的要比第4天走的要少")

  •         }

  •     }

  • ……

  • }

此時運行程序,會看到以下的效果。

  • 兩天所走的路程同樣

  • 2天走的要比第3天走的要多

  • 3天走的要比第4天走的要少

2.1.3  獲取數據

因爲數據是由單位和數值組成的。有的時候,須要單獨獲取單位和數值。本小節將主要講解這兩個功能。

1.獲取單位

在建立單位時,咱們提到了init(fromString:)方法,它能夠用來對單位進行建立,而且此單位有一個描述性的字符串,unitString屬性的功能就是用來獲取這個描述性的字符串。其語法形式以下:

  • var unitString: String! { get }

【示例2-6HKUnit-unitString】建立一個單位,並獲取單位中描述性的字符串。代碼以下:

  • 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 unit=HKUnit(fromString: "km")

  •         println(unit.unitString)                                                                //獲取字符串

  •     }

  • ……

  • }

此時運行程序,會看到以下的效果。

  • km

2.獲取基於單位的值

有時咱們只想查看數據中的數值,而不是整個數據,須要使用到doubleValueForUnit(_:)方法。其語法形式以下:

  • func doubleValueForUnit(_ unit: HKUnit!) -> Double

其中,unit用來指定一個單位對象。該方法的返回值類型爲雙精度類型。

【示例2-7HKQuantity-doubleValueForUnit】獲取不一樣單位數據中的值。代碼以下:

  • 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 unit1=HKUnit(fromString: "km")                                                   //建立一個公里單位

  •         var distance=HKQuantity(unit: unit1, doubleValue: 10)                          //建立一個長度數據對象

  •         println(distance.doubleValueForUnit(unit1))                                 //獲取數值

  •         var unit2=HKUnit(fromString: "m")                                                     //建立一個米單位

  •         println(distance.doubleValueForUnit(unit2))                                 //獲取基於米單位的數值

  •     }

  • ……

  • }

此時運行程序,會看到以下的效果。

  • 10.0

  • 10000.0

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

相關文章
相關標籤/搜索