zoukankan      html  css  js  c++  java
  • HealthKit开发教程之HealthKit的复合数据

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

    复合数据就是复合单位和值构成的数据。所谓复合单位就是由单位进行乘法、除法等得到的单位,如m/s、lb·ft等就是复合单位。本节将针对这些复合数据进行讲解。

    HealthKit的相乘得到的复合数据

    在物理学中我们可能接触过类似lb·ft(扭矩单位,扭矩是使物体发生转动的一种特殊的力矩。)这样的单位。这种单位我们可以看做是两个单位相乘得到的复合单位。开发者如果想要在自己的程序中使用这种复合单位,首先需要对这种单位进行创建。创建这种单位需要使用到unitMultipliedByUnit(_:)方法,其语法形式如下:

     

    • func unitMultipliedByUnit(_ unit: HKUnit!) -> HKUnit!

    其中,参数unit:用来指定被乘的单位。

    【示例2-44:HKUnit-unitMultipliedByUnit】下面显示汽车中发电机的扭矩,以“磅.英尺”为单位。代码如下:

     

    • 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 footUnit = HKUnit.footUnit()                                                                                      //创建长度单位
    •         var poundUnit=HKUnit.poundUnit()                                                                               //创建质量单位
    •         var unitMultipliedByUnit=footUnit.unitMultipliedByUnit(poundUnit)          //相乘得到的复合单位
    •         var myForce=HKQuantity(unit: unitMultipliedByUnit, doubleValue: 100)
    •         println("汽车中发电机的扭矩为:(myForce)")
    •     }
    • ……
    • }

    此时运行程序,会看到如下的效果。

     

    • 汽车中发电机的扭矩为:100 lb·ft

    HealthKit的相除得到的复合数据

    在数学计算中,我们常常会遇到m/s这样的单位。这种单位是由两个单位相除得到的。如果开发者想要在自己的代码中使用这种单位。首先需要使用unitDividedByUnit(_:)方法实现对这种单位的创建,其语法形式如下:

     

    • func unitDividedByUnit(_ unit: HKUnit!) -> HKUnit!

    其中,参数_ unit用来指定单位,此单位用来作为除数。

    【示例2-45:HKUnit-unitDividedByUnit】下面显示用户跑步的速度,以“米/秒”为单位。代码如下:

     

    • import UIKit
    • import HealthKit
    • class ViewController: UIViewController {
    •     override func viewDidLoad() {
    •         super.viewDidLoad()
    •         // Do any additional setup after loading the view, typically from a nib.
    •         let meters = HKUnit.meterUnit()                                                                   //创建长度单位
    •         let seconds = HKUnit.secondUnit()                                                             //创建时间单位
    •         let metersPerSecond = meters.unitDividedByUnit(seconds)            //相除得到的复合单位
    •         let speed=HKQuantity(unit: metersPerSecond, doubleValue: 2)
    •         println("小明跑步的速度为:(speed)")
    •     }
    • ……
    • }

    此时运行程序,会看到如下的效果。

     

    • 小明跑步的速度为:2 m/s

    HealthKit的单位和整数的次方构成的复合数据

    在求体积和面积时,我们都会使用到m3、m2这样单位。这种单位是由单位和整数的次方构成的复合单位。如果开发者想要创建这种单位,就需要使用到unitRaisedToPower(_:)方法,其语法形式如下:

     

    • func unitRaisedToPower(_ power: Int) -> HKUnit!

    其中,参数power是一个整数,用来指定次方。

    【示例2-46:HKUnit-unitRaisedToPower】下面显示水池的体积,以“立方米”为单位。代码如下:

     

    • 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 meters = HKUnit.meterUnit()
    •         var cubicmeter=meters.unitRaisedToPower(3)        //单位和整数的次方构成的复合单位
    •         var pool=HKQuantity(unit: cubicmeter, doubleValue: 100)
    •         println("水池的体积为:(pool)")
    •     }
    • ……
    • }

    此时运行程序,会看到如下的效果。

     

    • 水池的体积为:100 m^3

    HealthKit的倒数构成的复合单位

    1/s这个单位为“赫兹”单位,它表示在1秒时间间隔内发生一个周期过程的频率。类似于1/s这种单位就是由一个单位的倒数构成。如果想要在程序中使用这种单位,需要使用到reciprocalUnit()方法。reciprocalUnit()方法的功能就是对单位进行求倒数构成新的复合单位。其语法形式如下:

     

    • func reciprocalUnit() -> HKUnit!

    【示例2-47:HKUnit-reciprocalUnit】下面显示在1秒时间间隔内发生一个周期过程的频率,以“1/秒”为单位。代码如下:

     

    • 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 seconds = HKUnit.secondUnit()
    •         var secondsInverse = seconds.reciprocalUnit()                                            //由倒数构成的复合单位
    •         var frequency=HKQuantity(unit: secondsInverse, doubleValue: 50)
    •         println("在1秒时间间隔内发生一个周期过程的频率为:(frequency)")
    •     }
    • ……
    • }

    此时运行程序,会看到如下的效果。

     

    • 在1秒时间间隔内发生一个周期过程的频率为:50 1/s

    本文选自:HealthKit开发快速入门教程大学霸资料,转载请注明出处,尊重技术尊重IT人!

  • 相关阅读:
    eclipse快捷键失效
    git学习 branch log rebase merge fetch remote add push pull
    解决netty tcp自定义消息格式粘包/拆包问题
    多线程while(!state){}有问题,volatile优化,sleep睡着之后唤醒,刷新变量缓存
    玄学eclipse ,突然所有文件报错,然后,ctrl+a, ctrl+x, ctrl+v就好了
    玄学springboot applicationcontext.getBean(用类名String还是类型Class), getBean(..)的调用场景结果不同?getBean(..)还会阻塞?@DependsOn按照名称依赖,那么getBean用类名String
    玄学yml,被@ActiveProfiles注解误导
    玄学yml,被@ActiveProfiles注解误导
    java动态代理,多服务实例,线程安全target,注解,面向切面修改具有注解的方法行为,ThreadLocal<Object>
    java键盘输入方法-
  • 原文地址:https://www.cnblogs.com/daxueba-ITdaren/p/4481343.html
Copyright © 2011-2022 走看看