HealthKit開發快速入門教程之HealthKit資料的操作
HealthKit開發快速入門教程之HealthKit資料的操作
資料的表示
在HealthKit中,資料是最核心的元素。透過分析資料,人們可以看到相關的健康資訊。例如,透過統計步數資料,人們可以知道一天走的步數。本章將主要講解HealthKit資料構成的方式,以及如何規範的表達一個資料。
資料的操作
在HealthKit中,資料都是與單位和值組成的,如圖2.1所示。此圖為一個睡眠分析的截圖。在此圖中59m就代表了一個資料。其中m為單位,59為基於單位的數值。本節將講解資料的建立、判斷、比較以及獲取等內容。
圖2.1 睡眠分析
2.1.1 建立資料
在HealthKit中資料都是由單位和值構成的。在使用資料之前,首先需要對資料進行建立。本小節將講解資料建立的兩個步驟:建立單位和建立基於單位的資料。
1.建立單位
在HealthKit中,為了讓資料具有實際物理意義,所以需要為資料中的值指定單位。HKUnit提供了便捷方法來建立HealthKit支援的所有基本單位。HKUnit是一個類。當我們要具體的使用它時,就需要對其進行例項化。例項化HKUnit需要使用到init(fromString:)方法。它可以用來對單位進行建立,並且此單位有一個描述性的字串,其語法形式如下:
convenience init!(fromString string: String!)
其中,string是一個字串,用來代表單位。此字串必須要符合HealthKit所支援的所有基本單位。Healthkit所支援的基本單位如附錄B所示。
【示例2-1:HKUnit-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: \"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
2.1.2 判斷、比較資料
比較和判斷是資料處理的基本操作。例如,透過比較的操作,可以讓使用者找出一組資料的最大值。本小節將詳細講解資料的判斷以及比較。
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1613635/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HealthKit開發快速入門教程之HealthKit的主要型別資料型別
- HealthKit開發快速入門教程之HealthKit開發概述簡介
- HealthKit開發教程之HealthKit的複合資料
- HealthKit開發教程之HealthKit的輔助資料
- HealthKit開發快速入門教程之HealthKit框架體系建立健康AppID框架APP
- ?HealthKit開發快速入門教程大學霸內部教程
- 有關HealthKit的那些事
- iOS-HealthKit裡你未了解的資料型別iOS資料型別
- [譯]在HealthKit中用 Swift 進行睡眠分析Swift
- 如何藉助 HealthKit 打造一款健身應用?
- git 入門教程之協同開發Git
- gitbook 入門教程之快速體驗Git
- HarmonyOS快速開發入門
- 前端開發快速入門前端
- 度量快速開發平臺——快速入門
- 大資料開發-Spark-初識Spark-Graph && 快速入門大資料Spark
- Unity 2D遊戲開發快速入門(內部資料)Unity遊戲開發
- 如何大資料開發入門大資料
- GO 語言快速開發入門Go
- Koa2開發快速入門
- 通俗易懂的ArcGis開發快速入門
- [大資料之Spark]——快速入門大資料Spark
- Elasticsearch和向量資料庫的快速入門Elasticsearch資料庫
- Web開發初探之JavaScript 快速入門WebJavaScript
- Jersey 開發RESTful(七)Jersey快速入門REST
- 開發環境配置pyenv快速入門開發環境
- Apple Watch開發快速入門教程APP
- OUYA遊戲開發快速入門教程遊戲開發
- Redis快取資料庫-快速入門Redis快取資料庫
- 第1章 1.1Deluxe APP快速入門——剪輯入門教學UXAPP
- Util應用框架快速入門(4) - 整合測試開發入門框架
- Linux入門教程之sed 命令常用操作介紹Linux
- gitbook 入門教程之使用 gitbook-cli 開發電子書Git
- QT開發快速入門-教程1:搭建QT開發環境QT開發環境
- python資料庫操作 - PyMySQL入門Python資料庫MySql
- 《Spring Boot從零開始學(視訊教學版)》快速入門Spring Boot應用開發Spring Boot
- 用 MyEclipse 開發 Spring 入門操作EclipseSpring
- 【TVM 學習資料】TensorIR 快速入門