HealthKit开发快速入门教程之HealthKit数据的操作
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数据的操作的更多相关文章
- HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID
HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...
- HealthKit开发快速入门教程之HealthKit开发概述简介
HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为“He ...
- HealthKit开发教程之HealthKit的复合数据
HealthKit开发教程之HealthKit的复合数据 复合数据就是复合单位和值构成的数据.所谓复合单位就是由单位进行乘法.除法等得到的单位,如m/s.lb·ft等就是复合单位.本节将针对这些复合数 ...
- HealthKit开发教程之HealthKit的主要类型数据
HealthKit开发教程之HealthKit的主要类型数据 在HealthKit中,我们将最常用到的数据称之为主要数据.主要数据基本上有三种:长度类型的数据.质量类型的数据.能量类型的数据.本节将主 ...
- HealthKit开发教程之HealthKit的辅助数据
HealthKit开发教程之HealthKit的辅助数据 在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据.压力类型数据.时间类型数据.温度类型数据.标量类型数据和电导率类 ...
- C#开发Unity游戏教程之Unity中方法的参数
C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别 ...
- C#开发Unity游戏教程之Scene视图与脚本的使用
C#开发Unity游戏教程之Scene视图与脚本的使用 Unity中Scene视图的快捷操作 Scene视图是开发者开发游戏时,操作最频繁的视图.因为一旦一个游戏对象被添加到游戏的场景中,就需要首先使 ...
- C++入门教程之二:变量
C++入门教程之二:变量 变量,顾名思义,意思是变化的量.变量的定义是计算机语言中能储存计算结果或能表示值的抽象概念.一个基本的程序需要变量,因此变量是程序设计中的一大重点. 变量基本结构 var_t ...
- php随笔4-thinkphp 学习-ThinkPHP3.1快速入门(2)数据CURD
ThinkPHP3.1快速入门(2)数据CURD 浏览:194739 发布日期:2012/09/05 分类:文档教程 关键字: 快速入门 CURD 上一篇中,我们了解了ThinkPHP的基础部分, ...
随机推荐
- 完善dedecms站内搜索代码,为搜索结果添加第*页
自那些平凡而伟大的程序猿开发了内容管理系统(cms),为了让看客们更快地找到自己感兴趣的内容,他们不断完善站内搜索代码,形成了一个小型的站内搜索引擎.可能有些网站模板设计师没考虑到seo的问题,很多站 ...
- (7)UI(基础对象)
1.地图控件: 地图控件可支持导入Tiled地图编辑器导出的tmx格式文件,地图是制作游戏关卡地形图的控件,对于即时战略类型游戏的制作,为了使玩家流畅的切换游戏画面,经常会使用超过屏幕尺寸的地图. ...
- cocos2d-x避免手动修改android.mk文件来编译
编辑android.mk文件,替换为如下内容 LOCAL_PATH := $(call my-dir) LOCAL_PATH := $(call my-dir) include $(CLEAR_VAR ...
- MySQL 5.6 Warning: Using a password on the command line interface can be insecure
MySQL 5.6 在命令行输入密码,就会提示这些安全警告信息. Warning: Using a password on the command line interface can be inse ...
- Unity3d 经验小结
Unity3d 经验小结 文本教程 你是第2541个围观者 0条评论 供稿者:Jamesgary 标签:unity3d教程 Fbx.贴图导入Unity时的注意事项: 在导出Fbx之前,Maya中已 ...
- [BZOJ3672][UOJ#7][NOI2014]购票
[BZOJ3672][UOJ#7][NOI2014]购票 试题描述 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. ...
- poj1753枚举
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33670 Accepted: 14713 Descr ...
- 【Hadoop】史上最全 Hadoop 生态 全景图
- 《ASP.NET MVC4 WEB编程》学习笔记------Web API
本文截取自情缘 1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集 ...
- python在线文档
中文 http://python.usyiyi.cn/--------------------------不完整 http://www.pythondoc.com/pythontutorial27/i ...