在HealthKit中,數據是最核心的元素。經過分析數據,人們能夠看到相關的健康信息。例如,經過統計步數數據,人們能夠知道一天走的步數。本章將主要講解HealthKit數據構成的方式,以及如何規範的表達一個數據。ide
在HealthKit中,數據都是與單位和值組成的,如圖2.1所示。此圖爲一個睡眠分析的截圖。在此圖中59m就表明了一個數據。其中m爲單位,59爲基於單位的數值。本節將講解數據的建立、判斷、比較以及獲取等內容。spa
圖2.1 睡眠分析orm
在HealthKit中數據都是由單位和值構成的。在使用數據以前,首先須要對數據進行建立。本小節將講解數據建立的兩個步驟:建立單位和建立基於單位的數據。對象
1.建立單位教程
在HealthKit中,爲了讓數據具備實際物理意義,因此須要爲數據中的值指定單位。HKUnit提供了便捷方法來建立HealthKit支持的全部基本單位。HKUnit是一個類。當咱們要具體的使用它時,就須要對其進行實例化。實例化HKUnit須要使用到init(fromString:)方法。它能夠用來對單位進行建立,而且此單位有一個描述性的字符串,其語法形式以下:ci
convenience init!(fromString string: String!)開發
其中,string是一個字符串,用來表明單位。此字符串必需要符合HealthKit所支持的全部基本單位。Healthkit所支持的基本單位如附錄B所示。字符串
【示例2-1:HKUnit-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-2:HKQuantity-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
比較和判斷是數據處理的基本操做。例如,經過比較的操做,可讓用戶找出一組數據的最大值。本小節將詳細講解數據的判斷以及比較。
1.判斷單位是否爲空
不少的單位有如m/s的狀況,若是當兩個單位同樣時,此單位就會抵消,變爲一個空的單位。爲了不這種狀況的發生,HealthKit提供了一個isNull()方法。此方法用來判斷建立的單位是否爲空,其語法形式以下:
func isNull() -> Bool
其中,該方法的返回值類型爲布爾類型。當Bool爲true時,表示建立的單位爲空;當Bool爲false時,表示建立的單位不爲空。
【示例2-3:HKUnit-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.判斷數據的兼容性
同類型單位和單位之間是能夠進行轉換的,如以米爲單位的數據和釐米爲單位的數據,以千克爲單位的數據和以克爲單位的數據等。而兼容性就是用來判斷數據和提供的單位之間是否能夠進行轉換。在HealthKit中isCompatibleWithUnit(_:)方法能夠用來對數據的兼容性進行判斷,其語法形式以下:
func isCompatibleWithUnit(_ unit: HKUnit!) -> Bool
其中,unit用來指定一個單位對象。該方法的返回值類型爲布爾類型。當Bool爲true時,表示quantity對象和提供的單位相兼容;當Bool爲false時,表示quantity對象和提供的單位不兼容。
【示例2-4:HKQuantity-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("distance與unit2兼容")
}else{
println("distance與unit2不兼容")
}
var unit3=HKUnit(fromString: "s") //建立一個時間單位
//判斷兼容
if(distance.isCompatibleWithUnit(unit3)){
println("distance與unit3兼容")
}else{
println("distance與unit3不兼容")
}
……
}
此時運行程序,會看到以下的效果。
distance與unit2兼容
distance與unit3不兼容
3.比較數據
同簡單的數值同樣,數據也能夠進行比較的。在HealthKit中提供了compare(_:)方法,能夠實現數據的比較功能,其語法形式以下:
func compare(_ quantity: HKQuantity!) -> NSComparisonResult
其中,quantity用來指定一個數量對象。該方法的返回值類型爲NSComparisonResult枚舉類型,其語法形式以下:
enum NSComparisonResult : Int {
case OrderedAscending
case OrderedSame
case OrderedDescending
}
其中,OrderedAscending表示左邊的數據小於右邊的數據;OrderedSame表示兩個數據相等;OrderedDescending表示右邊的數據小於左邊的數據。
【示例2-5:HKQuantity-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天走的要少
因爲數據是由單位和數值組成的。有的時候,須要單獨獲取單位和數值。本小節將主要講解這兩個功能。
1.獲取單位
在建立單位時,咱們提到了init(fromString:)方法,它能夠用來對單位進行建立,而且此單位有一個描述性的字符串,unitString屬性的功能就是用來獲取這個描述性的字符串。其語法形式以下:
var unitString: String! { get }
【示例2-6:HKUnit-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-7:HKQuantity-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人!