多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > 綜合技術(shù) > iOS中 HeathKit框架學習 步數(shù)統(tǒng)計等 韓俊強的博客

iOS中 HeathKit框架學習 步數(shù)統(tǒng)計等 韓俊強的博客

來源:程序員人生   發(fā)布時間:2016-11-05 08:38:20 閱讀次數(shù):3478次

逐日更新關(guān)注:http://weibo.com/hanjunqiang  新浪微博!iOS開發(fā)者交換QQ群: 446310206

HeathKit框架學習

本文結(jié)構(gòu)
  • 簡介
  • 用戶數(shù)據(jù)安全及隱私
  • HeathKit框架
  • HeathKit使用
  • 總結(jié)

簡介

HeathKit是Apple公司在推出iOS 8 系統(tǒng)時1塊推出的關(guān)于健康信息的框架。如果iPhone手機系統(tǒng)升級到iOS8以后就會發(fā)現(xiàn)多了1個健康-app,這就是Apple提供的1個記錄用戶健康信息的app,可以用它來分享健康和健身數(shù)據(jù)。還可以指定數(shù)據(jù)的來源,比如我們自己創(chuàng)建1個app,在我們的app中使用了HeathKit框架以后只要經(jīng)過用戶的認證,就能夠在我們的app當中給健康分享數(shù)據(jù)或從健康中獲得數(shù)據(jù)。

HeathKit可以與健身裝備1起工作,iPhone手機本身可以監(jiān)控步數(shù)信息,會自動導入步數(shù)信息。但是其他信息或裝備需要配套的應(yīng)當才能獲得到數(shù)據(jù)并導入到HeathKit中并在健康中顯示。

HeathKit不能再iPad中使用,而且它也不支持擴大。

用戶數(shù)據(jù)安全及隱私

由于用戶的健康信息多是敏感的,所以這些用戶信息不能讓開發(fā)者很隨意的獲得到。每條信息的讀寫都需要用戶去選擇是不是同意,比如用戶可以同意你獲得到用戶的身高體重,但是不同意讀寫生殖健康等其他用戶不愿意公然的信息。為了避免信息泄漏,我們是不知道用戶是不是制止了某條信息是不是被用戶制止讀取的。簡單的說,如果獲得不到某條信息,就代表沒有這條信息。

關(guān)于更多的關(guān)于隱私的信息,可以參考隱私

HeathKit框架

HeathKit在各個利用之間提供了1種成心義的方式同享數(shù)據(jù)。因此,我們必須使用HeathKit框架提供的數(shù)據(jù)類型和單位。這保證了數(shù)據(jù)存在的真正意義,我們不能自定義數(shù)據(jù)類型及單位。框架使用了子類化,例如HKObjectHKObjectType抽象類具有很多有平行關(guān)系的子類,當使用ObjectObjectType的時候,必須確保使用正確的子類。

HeathKit中能夠存儲的類都是HKObject的子類,大部份HKObject的子類都是不可變的。每一個對象都有下面的屬性:

  • UUID:每一個對象的標識符
  • Source:數(shù)據(jù)的來源,來源可以是HeathKit的健康app,也能夠是我們自己創(chuàng)建的app。當1個對象存儲到HeathKit中時會設(shè)置其來源。只有從HeathKit中獲得到的數(shù)據(jù)的來源才有效。
  • Metadata:1個包括該對象額外信息的字典,元數(shù)據(jù)包括預(yù)定義的key和自定義的key,預(yù)定義的key用來幫助我們在利用間同享數(shù)據(jù),而自定義的key用來擴大HeathKit,為對象添加針對利用的數(shù)據(jù)。

HeathKit的對象主要分為特點和樣本。特點對象代表用戶的基本不變的數(shù)據(jù),包括用戶的生日、血型和性別等。我們創(chuàng)建的app不能修改這些信息,只能讓用戶在健康中去修改或添加個人特點信息。
樣本對象代表某個特定時間的數(shù)據(jù),所有的樣本類型的對象都是HKSample的子類。它們都有下面的特性:

  • Type :樣本類型,例如:睡眠分享、步行距離、心率樣本等
  • StartDate:樣本開始時間
  • EndDate:樣本結(jié)束時間。如果是某1個時間的樣本,則開始于結(jié)束時間相同,如果是某個時間段的樣本,則結(jié)束時間在開始時間的后面。

樣本類型又可以分為4個類型:

  1. 種別樣本(HKCategorySample):在iOS 8 中,只有睡眠分析這1個種別樣本。代表有限種類的樣本.
  2. 數(shù)量樣本(HKQuantitySample):這類樣本代表存儲數(shù)據(jù)的樣本,比如步數(shù)、距離、用戶的體溫等。它是HeathKit中最多見的數(shù)據(jù)類型。
  3. 關(guān)系樣本(HKCorrelation):代表復(fù)合數(shù)據(jù),包括1個或多個樣本。在iOS 8 中,用correlation代表食品和血壓。在創(chuàng)建食品或血壓時,需要用correlation
  4. 訓練活動(HKWorkout):代表某種活動,比如走、跑步等。包括有開始時間、結(jié)束時間、運動類型、消耗能量、運動距離等屬性。還可以為workout關(guān)聯(lián)許多詳細的樣本。不像correlation,這些樣本不包括在workout中,但是可以通過workout獲得到。

再介紹1個HeathKit中常常用到的1些類。

HKSamle

每一個HkSample的子類都有對應(yīng)的便利方法創(chuàng)建對應(yīng)的對象。比如:

對數(shù)量樣本,需要創(chuàng)建HKQuantity類的實例。而且數(shù)量的單位和類型標識符文檔中描寫的可用單位要相同。例如:HKQuantityTypeIdentifierHeight 文檔中說明它使用長度單位,因此,你的數(shù)量必須使用厘米、米、英尺、英寸或其他長度單位。

這里寫圖片描述

對應(yīng)種別樣本,需要創(chuàng)建HKCategorySample的實例。它的值必須和類型標識符文檔中描寫的枚舉值相干。例如, HKCategoryTypeIdentifierSleepAnalysis 文檔中說明它使用的枚舉值。因此你在創(chuàng)建樣本時必須從這個枚舉中傳遞1個值。
這里寫圖片描述

一樣,你必須先創(chuàng)建correlation包括的所有樣本。correlation的類型標識符描寫了它可以包括的類型和對象的數(shù)量。不要把被包括的對象存進HealthKit。它們是以correlation的1部份存儲的。

逐日更新關(guān)注:http://weibo.com/hanjunqiang  新浪微博!iOS開發(fā)者交換QQ群: 446310206

這里寫圖片描述

對訓練活動樣本,首先,創(chuàng)建 HKWorkoutType 實例其實不需要指定類型標識符。所有的workout都是用一樣的類型標識符。第2,對每一個workout你都需要提供1個 HKWorkoutActivityType 值。這個值定義了workout中履行的活動的類型。最后,當workout保存到HealthKit后,你可以給workout關(guān)聯(lián)額外的樣本。這些樣本提供了workout的詳細信息。

這里寫圖片描述

HKQuery

HeathKit提供了許多查詢讀取數(shù)據(jù)的方法:

  1. 直接方法查詢。對特點樣本,可以直接查詢獲得到,這些方法只能查詢特點樣本。更多信息: HKHealthStore Class Reference
  2. 樣本查詢。這是使用最多的查詢。使用樣本查詢可以查詢在HeathKit中任意的數(shù)據(jù)。而且可以對結(jié)果進行排序等。更多信息:HKSampleQuery Class Reference

  3. 視察者查詢。這是1個長時間運行的查詢,它會檢測HealthKit存儲,并在匹配到的樣本產(chǎn)生變化時通知你。如果當存儲產(chǎn)生變化時你想得到通知,就使用視察者查詢。更多信息:HKObserverQuery Class Reference

  4. 錨定對象查詢。用這類查詢來搜索添加進存儲的項。當錨定查詢第1次履行時,會返回存儲中所有匹配的樣本。在接下來的履行中,只會返回上1次履行以后添加的項目。通常,錨定對象查詢會和視察者查詢1起使用。視察者查詢告知你某些項目產(chǎn)生了變化,而錨定對象查詢來決定有哪些(如果有的話)項目被添加進了存儲。更多信息:HKAnchoredObjectQuery Class Reference
  5. 統(tǒng)計查詢。使用這類查詢來在1系列匹配的樣本中履行統(tǒng)計運算。你可使用統(tǒng)計查詢來計算樣本的總和、最小值、最大值或平均值。更多信息: HKStatisticsQuery Class Reference

  6. 統(tǒng)計集合查詢。使用這類查詢來在1系列長度固定的時間間隔中履行屢次統(tǒng)計查詢。通常使用這類查詢來生成圖表。查詢提供了1些簡單的方法來計算某些值,例如,每天消耗的總熱量或每5分鐘行走的步數(shù)。統(tǒng)計集合查詢是長時間運行的。查詢可以返回當前的統(tǒng)計集合,也能夠監(jiān)測HealthKit存儲,并對更新做出響應(yīng)。更多信息,參見 HKStatisticsCollectionQuery Class Reference。

  7. Correlation查詢。使用這類查詢來在correlation查找數(shù)據(jù)。這類查詢可以為correlation中每一個樣本類型包括獨立的謂詞。如果你只是想匹配correlation類型,那末請使用樣本查詢。更多信息,參見 HKCorrelation Class Reference。

  8. 來源查詢。使用這類查詢來查找HealthKit存儲中的匹配數(shù)據(jù)的來源(利用和裝備)。來源查詢會列出貯存的特定樣本類型的所有來源。更多信息,參見HKSourceQuery Class Reference。

  9. 逐日更新關(guān)注:http://weibo.com/hanjunqiang  新浪微博!iOS開發(fā)者交換QQ群: 446310206


HKUnit

這個類代表要查詢的數(shù)據(jù)的單位的類,比如體重的單位,可以為kg、lbs等。這個類為不同的數(shù)據(jù)類型提供了不同的單位方法。1般在創(chuàng)建前面介紹的樣本類型的時候,都需要這個類為樣本添加對應(yīng)的單位。而且提供了1些數(shù)學運算,比如千米、米、厘米等之間的轉(zhuǎn)換。

在某些場合,你可使用格式化器來本地化數(shù)量。iOS8提供了提供了新的格式化器來處理長度(NSLengthFormatter)、質(zhì)量(NSMassFormatter)和能量(NSEnergyFormatter)。對其他的數(shù)量,你需要自己來換算單位和本地化數(shù)據(jù)。

HKHeathStore

HeathKit的核心就是它,它代表HeathKit的數(shù)據(jù)庫,使用它就能夠從數(shù)據(jù)庫中讀取數(shù)據(jù)。比較重要的方法:

  • isHealthDataAvailable:判斷當前設(shè)置是不是支持HeathKit
  • requestAuthorizationToShareTypes(typesToShare: Set?, readTypes typesToRead: Set?, completion: (Bool, NSError?) -> Void): 向用戶要求同意讀寫某些數(shù)據(jù)
  • saveObject(object: HKObject, withCompletion completion: (Bool, NSError?) -> Void) :向數(shù)據(jù)庫中添加數(shù)據(jù)
  • executeQuery(query: HKQuery) :履行查詢,即上面介紹的幾種查詢方法。

HeathKit使用

在使用HealthKit之前,必須要履行以下步驟:

  1. 打開HeathKit,在Target欄中,打開Capabilities菜單,將HealthKit這1項的開關(guān)設(shè)為ON的狀態(tài)。
  2. 創(chuàng)建HeathManager.Swift 文件,并導入

    `import HeathKit`
    

    HeathKit的核心是HeathStore,創(chuàng)建

    func authorizeHealthKit(completion:((success:Bool,error:NSError!)->Void)!){}
    

    然后調(diào)用在這個方法中調(diào)用isHealthDataAvailable判斷當前裝備是不是支持HeathKit

  3. //判斷當前裝備是不是支持 if !HKHealthStore.isHealthDataAvailable(){ let error = NSError(domain: "", code: 2, userInfo: [NSLocalizedDescriptionKey:"HealthKit is not available in this Device"]) if completion != nil { completion(success: false, error: error) } }


  4. ,最后在上面的方法中,設(shè)置要讀寫的數(shù)據(jù)類型。

  5. 為你的利用實例化1個 HKHealthStore 對象。每一個利用只需要1個HealthKit存儲實例。這個存儲實例就是你和HealthKit數(shù)據(jù)庫交互的主要接口。

    let hkHealthStore = HKHealthStore()
    
  6. 使用 requestAuthorizationToShareTypes:readTypes:completion:來認證要求從HeathKit獲得數(shù)據(jù)的權(quán)限。

    //要求連接 hkHealthStore.requestAuthorizationToShareTypes(healthKitTypesToWrite as? Set<HKSampleType>, readTypes: healthKitTypesToRead as? Set<HKObjectType>) { (success, error) -> Void in if completion != nil{ completion(success:success,error:error) } return }

    如果當前裝備支持HeathKit的時候,這樣就會彈出1個要求界面,讓用戶選擇是不是同意你能夠獲得到你要要求的數(shù)據(jù)。

獲得特點信息

我們首先創(chuàng)建了ProfileViewController.swift,并用IB創(chuàng)建1個要求個人信息的界面
這里寫圖片描述

然后在HeathManager.Swift 文件中添加要求個人信息的方法。
對要求特點信息,條件上用戶通過健康添加了誕生日期、性別、血型等特點信息

func readProfile()->(age:Int?,biologicalsex:HKBiologicalSexObject?,bloodType:HKBloodTypeObject?){ //要求年齡 var age:Int? let birthDay:NSDate; do { birthDay = try hkHealthStore.dateOfBirth() let today = NSDate() let diff = NSCalendar.currentCalendar().components(.Year, fromDate: birthDay, toDate: today, options: NSCalendarOptions(rawValue: 0)) age = diff.year }catch { } //要求性別 var biologicalSex :HKBiologicalSexObject? do { biologicalSex = try hkHealthStore.biologicalSex() }catch { } //要求血型 var hkbloodType:HKBloodTypeObject? do { hkbloodType = try hkHealthStore.bloodType() }catch{ } return (age,biologicalSex,hkbloodType) }


要求體重、身高、BMI的時候,創(chuàng)建另外的方法。

func fetchMostRecentSample(sample:HKSampleType,competion:((HKSample!,NSError!)->Void)!){ //1.創(chuàng)建謂詞 let past = NSDate.distantPast() let now = NSDate() let mostRecentPredicate = HKQuery.predicateForSamplesWithStartDate(past, endDate: now, options: .None) //2.創(chuàng)建返回結(jié)果排序的描寫,是降序還是升序的,由于只需要1個結(jié)果,就設(shè)定限制為1個 let sortDescrptor = NSSortDescriptor(key:HKSampleSortIdentifierStartDate , ascending: false) let limit = 1 //3.創(chuàng)建HKSampleQuery對象, let sampleQuery = HKSampleQuery(sampleType: sample, predicate: mostRecentPredicate, limit: limit, sortDescriptors: [sortDescrptor]) { (sampleQuery, results, error) -> Void in if let queryError = error { competion(nil,queryError) return } let mostRecentSample = results?.first if competion != nil{ competion(mostRecentSample,nil) } } //4.履行查詢 self.hkHealthStore.executeQuery(sampleQuery) }


獲得以后在之前創(chuàng)建的ProfileViewController.swift文件中獲得這些信息,并更新UI。

對應(yīng)特點信息,可以直接調(diào)用查詢方法,并更新

let profile = healthManager?.readProfile() self.healthStore = HKHealthStore() ageLabel.text = profile?.age == nil ? kUnKnowString:String(profile!.age!) sexLabel.text = biologicSexLiteral(profile?.biologicalsex?.biologicalSex) bloodTypeLabel.text = bloodTypeLiteral(profile?.bloodType?.bloodType)


這里面創(chuàng)建了兩個工具方法biologicSexLiteralbloodTypeLiteral來修改查詢的結(jié)果為我們想要的模樣并顯示在界面上。

對體重和身高,需要創(chuàng)建樣本查詢

/** 獲得并更新體重 */ func updateWeight(){ let weightSampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass) self.healthManager?.fetchMostRecentSample(weightSampleType!, competion: { (mostRecentSample, error) -> Void in if error != nil { return } var weightString = self.kUnKnowString self.weight = mostRecentSample as? HKQuantitySample //根據(jù)我們想要的數(shù)據(jù)類型單位獲得對應(yīng)的結(jié)果 if let kilograms = self.weight?.quantity.doubleValueForUnit(HKUnit.gramUnitWithMetricPrefix(HKMetricPrefix.Kilo)){ //體重格式化 let weightFommater = NSMassFormatter() weightFommater.forPersonMassUse = true weightString = weightFommater.stringFromKilograms(kilograms) } //由于這個查詢默許是異步查詢的,所以需要在主線程更新UI dispatch_async(dispatch_get_main_queue()) { () -> Void in self.weightLabel.text = weightString self.updateBMILabel() } }) } /** 獲得并更新身高 */ func updateHeight(){ //設(shè)置要查找的類型,根據(jù)標識符 let heightSampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight) //獲得身高樣本 self.healthManager?.fetchMostRecentSample(heightSampleType!, competion: { (heightSample, error) -> Void in if error != nil { return } var heightStr = self.kUnKnowString self.height = heightSample as? HKQuantitySample //根據(jù)我們想要的數(shù)據(jù)類型單位獲得對應(yīng)的結(jié)果 if let kilograms = self.height?.quantity.doubleValueForUnit(HKUnit.meterUnit()){ heightStr = String(format: "%.2f", kilograms) + "m" } //由于這個查詢默許是異步查詢的,所以需要在主線程更新UI dispatch_async(dispatch_get_main_queue()) { () -> Void in self.heightLabel.text = heightStr self.updateBMILabel() } }) }


對應(yīng)BMI,它代表人的身體質(zhì)量指數(shù),它的計算方式是:體重/(身高*身高)。因此它可以這樣取得

/** 獲得并設(shè)置BMI: */ func updateBMILabel(){ //根據(jù)我們想要的數(shù)據(jù)類型單位獲得對應(yīng)的結(jié)果 let weight = self.weight?.quantity.doubleValueForUnit(HKUnit.gramUnitWithMetricPrefix(HKMetricPrefix.Kilo)) let height = self.height?.quantity.doubleValueForUnit(HKUnit.meterUnit()) var bmiValue = 0.0 if height == 0{ return } dispatch_async(dispatch_get_main_queue()) { () -> Void in bmiValue = (weight!)/(height! * height!) self.BMILabel.text = String(format: "%.02f", bmiValue) } }


添加BMI到HeathStore

在下面的方法中添加1個alertView讓用戶輸入BMI值,然后點擊確認按鈕以后添加到HeathStore

@IBAction func addBMIData2HealthStore(sender: AnyObject) { let alertView = UIAlertController(title: "輸入BMI值", message: nil, preferredStyle: .Alert) alertView.addTextFieldWithConfigurationHandler { (textField) -> Void in textField.keyboardType = .NumberPad } let action = UIAlertAction(title: "添加", style: .Default) { (action) -> Void in var value:Double? if let text = alertView.textFields?.first?.text { if text.characters.count > 0 { value = Double(text) self.saveBMI2HealthStore(value!) } } } alertView.addAction(action) self .presentViewController(alertView, animated: true, completion: nil) } //保存BMI到heathKitStore中 func saveBMI2HealthStore(height:Double){ //BMI的類型 let BMIType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex) //根據(jù)標識符對應(yīng)的單位創(chuàng)建BMI的數(shù)量對象 let BMIQuantity = HKQuantity(unit: HKUnit.countUnit(), doubleValue: height) let now = NSDate() //根據(jù)起止時間和上面創(chuàng)建的創(chuàng)建HKQuantity對象創(chuàng)建數(shù)量樣本 let BMISample = HKQuantitySample(type: BMIType!, quantity: BMIQuantity, startDate: now, endDate: now) //保存數(shù)量樣本到healthStore中 self.healthStore?.saveObject(BMISample, withCompletion: { (success, error) -> Void in if success { print("添加成功") self.updateWeight() } if (error != nil) { print("添加失敗") } }) }


如果添加成功,你就能夠去手機上的健康查找BMI,就能夠看到我們剛才添加的BMI值,而且它的來源是我們創(chuàng)建的app。

獲得HKWorkout

創(chuàng)建1個WorkOutsViewController.swift文件,并在SB中拖對應(yīng)的IB文件,界面以下
這里寫圖片描述

然后在在HeathManager.Swift 文件中添加要求workout的方法

/** 獲得workoutData */ func fetchWorkOutsData(completion:([AnyObject]!,NSError!)->Void){ let workOutsSampleType = HKSampleType.workoutType() let workOutsPredicate = HKQuery.predicateForWorkoutsWithWorkoutActivityType(.Running) let sortDescrptor = NSSortDescriptor(key:HKSampleSortIdentifierStartDate , ascending: false) let workOutsQuery = HKSampleQuery(sampleType: workOutsSampleType, predicate: workOutsPredicate, limit: 0, sortDescriptors: [sortDescrptor]) { (workoutsQuery, results, error) -> Void in if (error != nil){ print("獲得失敗") return } if results != nil{ completion(results!,nil) } } self.hkHealthStore.executeQuery(workOutsQuery) }


然后在WorkOutsViewController.swift文件的viewWillAppear()方法中要求workout

self.healthManager?.fetchWorkOutsData({ (results, error) -> Void in if error != nil{ print("獲得失敗") }else{ self.workOuts = results as! [HKWorkout] } dispatch_async(dispatch_get_main_queue(), { () -> Void in self.tableView.reloadData() }); })


最后在tableView顯示以下
這里寫圖片描述

保存HKWorkout

在上面的界面的NavgationBarrightBarItem向下再拖1個控制器,并添加對應(yīng)的文件AddWorkoutsViewController.swift,并在IB中設(shè)置界面信息以下
這里寫圖片描述

然后在 AddWorkoutsViewController.swift 復(fù)寫 tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath),針對點擊不同的cell,履行不同的方法。即讓用戶輸入點擊的cell對應(yīng)的輸入方式,比如時間就是時間選擇器。距離就是1個警示框加1個文本框等。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: true) self.tableView.tableFooterView = UIView() switch indexPath.row{ case 0: self.setupPickerView() case 1,2: self.setupDatePickerView(indexPath.row) case 3,4: self.setupAlertView(indexPath.row) default: break } }


這里面對應(yīng)的選擇的方法就不逐一介紹了,就是幾個普通的view的添加。添加完所有的信息以后就能夠點擊done 保存信息,方法以下:

@IBAction func addWorkOut(sender: AnyObject) { self.heathStore = HKHealthStore() //獲得距離和能量的數(shù)值 let distanceValue = Double(self.distanceLabel.text!) let energyValue = Double(self.energyLabel.text!) //根據(jù)上面的數(shù)值創(chuàng)建對應(yīng)的HKQuantity對象 let distance = HKQuantity(unit: HKUnit.mileUnit(), doubleValue: distanceValue!) let energy = HKQuantity(unit: HKUnit.calorieUnit(), doubleValue: energyValue!) let endDate = self.dateFommater?.dateFromString(self.endDateLabel.text!) let startDate = self.dateFommater?.dateFromString(self.startDateLabel.text!) //這里我默許設(shè)置成running了。可以根據(jù)具體的類型再進行設(shè)置。 //創(chuàng)建HKWorkout對象。 let workout = HKWorkout(activityType: .Running, startDate: startDate!, endDate: endDate!, workoutEvents: nil, totalEnergyBurned: energy, totalDistance: distance, metadata: nil) //保存上面創(chuàng)建的HKWorkout對象 self.heathStore?.saveObject(workout, withCompletion: { (success, error) -> Void in if error != nil{ print("添加毛病") return } if success{ print("添加成功") dispatch_async(dispatch_get_main_queue(), { () -> Void in self.dismissViewControllerAnimated(true, completion: nil) }) } }) }


如果上面都履行成功,AddWorkoutsViewController.swift就會模態(tài)消失,然后在上面的1個頁面`WorkOutsViewController.swift就會在tableView的最上層顯示出我們剛才添加成功的HKWorkout

總結(jié)

在本人過完春節(jié)回到公司上班以后經(jīng)理問我健康app里面的信息能不能獲得到。之前只是簡單了解了這個框架,但是里面的具體結(jié)構(gòu)體系其實不了解。就趁著項目不忙,抽空把HeathKit學習了解了1下。本文的demo也采取了之前自學的Swift簡單的實現(xiàn)了1下(屬于Switer新手)。可能會有毛病或不準確的地方,如果你看到了,可以給我聯(lián)系ls_xyq@126.com,我會及時更改的。寫這篇文章1是對HeathKit的學習的1個練習,在這也是賜與后會用到的童鞋1個可以參考的東西。

HeathKit不只是上面的這些內(nèi)容,但是能把上面的這些問題弄定,我覺得針對HeathKit的體系會有1個清楚的認識,學習HeathKit更深層次的內(nèi)容會有很大的幫助。

本文的demo已放到github上面,需要的同學可以下載看看。

本文參考文章:

  1. HealthKit框架參考
  2. HealthKit開發(fā)教程Swift版
  3. The HealthKit Framework
  4. 逐日更新關(guān)注:http://weibo.com/hanjunqiang  新浪微博!iOS開發(fā)者交換QQ群: 446310206



生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美一级日韩在线观看 | 亚洲性受 | 美国一级毛片片aa成人 | 日本一区二区三区在线 视频观看免费 | 久久成人永久免费播放 | 国产成人亚洲综合欧美一部 | 精品国产免费一区二区三区五区 | 正在播放国产一区 | 国产精品特黄毛片 | 精品国产日韩亚洲一区二区 | 日本高清一区二区三区不卡免费 | 欧美做爱毛片 | 亚洲视频免费观看 | 亚洲免费小视频 | 91精品久久久久久久久久小网站 | 久久精品国产免费 | 999精品影视在线观看 | 亚洲国产成人精品不卡青青草原 | 超清高清欧美videos | 级毛片| 成人午夜精品久久久久久久小说 | 99爱免费观看视频在线 | 国产免费一区二区三区最新 | 亚洲国产综合网 | yellow网站在线观看 | 亚洲色图小说 | 欧美日韩中文字幕 | 射在线 | 日本高清中文字幕一区二区三区 | 亚洲精品天堂在线观看 | 亚洲资源在线播放 | 日韩手机在线视频 | 8av国产精品爽爽ⅴa在线观看 | 成人国内精品久久久久影院 | 亚洲综合在线播放 | 美女视频在线观看网站 | 亚洲精品1区 | 最近中文字幕视频国语中文字幕 | 伊人精品影院一本到欧美 | 成人在线小视频 | 性xxxx免费观看视频 |