​HealthKit开发快速入门教程之HealthKit数据的操作

数据的表示

在HealthKit中,数据是最核心的元素。通过分析数据,人们可以看到相关的健康信息。例如,通过统计步数数据,人们可以知道一天走的步数。本章将主要讲解HealthKit数据构成的方式,以及如何规范的表达一个数据。

2.1  数据的操作

在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天走的要少

2.1.3  获取数据

由于数据是由单位和数值组成的。有的时候,需要单独获取单位和数值。本小节将主要讲解这两个功能。

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

​HealthKit开发快速入门教程之HealthKit数据的操作相关推荐

  1. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID

    HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...

  2. HealthKit开发快速入门教程之HealthKit开发概述简介

    HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为&qu ...

  3. ​HealthKit开发快速入门教程大学霸内部教程

    ​HealthKit开发快速入门教程大学霸内部教程 ​ ​ 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...

  4. HealthKit开发教程之HealthKit的复合数据

    HealthKit开发教程之HealthKit的复合数据 复合数据就是复合单位和值构成的数据.所谓复合单位就是由单位进行乘法.除法等得到的单位,如m/s.lb·ft等就是复合单位.本节将针对这些复合数 ...

  5. HealthKit开发教程之HealthKit的辅助数据

    HealthKit开发教程之HealthKit的辅助数据 在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据.压力类型数据.时间类型数据.温度类型数据.标量类型数据和电导率类 ...

  6. C#开发Unity游戏教程之Unity中方法的参数

    C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号"( )",有意义吗?看起来最 ...

  7. C#开发Unity游戏教程之Scene视图与脚本的使用

    C#开发Unity游戏教程之Scene视图与脚本的使用 Unity中Scene视图的快捷操作 Scene视图是开发者开发游戏时,操作最频繁的视图.因为一旦一个游戏对象被添加到游戏的场景中,就需要首先使 ...

  8. python语言if语句-Python入门教程之if语句的用法

    这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 OK分享完毕!需要Python资料的可以加QQ群:832339352 进群免费领取下面资料! ...

  9. IM开发快速入门(一):什么是IM系统?

    本文在编写时参考了博客作者"鹿呦呦"和在线课程"即时消息技术剖析与实战"的相关资料,一并表示感谢. 1.系列文章引言 IM系统看似简单(没错,很多土老板认为开发 ...

最新文章

  1. Android4.0 修改系统屏幕分辨率方法
  2. pytest入门学习(2)
  3. c语言文件打开函数,C语言fopen函数中文件打开方式(参数值)
  4. java gui 连接mysql数据库
  5. cpuset(7) — Linux manual page
  6. SCOM 2007 R2安装部署各组件支持的操作系统详细列表
  7. python 3 并发编程之多进程 multiprocessing模块
  8. Charles Https 请求 SSL乱码问题 charles unreadable
  9. php 包含因子,轻松掌握测量不确定度——(4)测量不确定度的评定和报告(完)...
  10. 18、TWS和IB中的错误处理信息
  11. iOS 模拟器调试web/h5代码
  12. 云计算就业前景究竟好不好 零基础如何学云计算
  13. 苹果CMS-v10系统标签
  14. python十进制转三进制_Python进制转换
  15. 2022年电工(技师)考试题及电工(技师)模拟试题
  16. 网站SEO优化方案 全面详细的写法
  17. 超大文件上传和断点续传的实现
  18. uniapp集成colorUI uView2.0 Vuex
  19. 流氓软件卸载了又偷偷冒出来,dllhost.exe暗藏安装玄机
  20. ipad2 越狱后安装slide enhancer 隐藏滑块解决方法总结

热门文章

  1. APPlication,Session和Cookie的区别
  2. Socket发完消息后,立即关闭连接,客户端丢失数据的问题
  3. python + ajax 实现拖动功能
  4. C# 读取 appconfig文件配置数据库连接的方法
  5. webBrowser自动填充、抓取网页数据
  6. Vue、React打包文件放在服务器,浏览器存在缓存问题的解决
  7. PHP获取当前时间戳,当前时间、及解决时区问题
  8. Xcode8 注释快捷键无效, 解决方案
  9. JAVA大文件上传断点续传解决方案
  10. MySQL 5.6 解决InnoDB: Error: Table “mysql“.“innodb_table_stats“ not found.问题