2017-05-29 34 views
0

我想創建一個標籤,顯示今日從HealthKit的步驟。我已儘可能允許HealthKit讀取/寫入數據,但我堅持實際獲取數據。無法獲得今天的步驟來顯示標籤

任何人都可以提供任何建議嗎?這裏是我的代碼,包括我想要顯示的步驟標籤:

import Foundation 
import UIKit 
import HealthKit 


class HealthKitPage : UIViewController 
{ 
     let healthStore: HKHealthStore = HKHealthStore() 

     override func viewDidLoad() 
     { 
       var shareTypes = Set<HKSampleType>() 

       shareTypes.insert(HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!) 

       var readTypes = Set<HKObjectType>() 
       readTypes.insert(HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!) 


       healthStore.requestAuthorization(toShare: shareTypes, read: readTypes) { (success, error) -> Void in 
          if success { 
            print("success") 
          } else { 
            print("failure") 
          } 

          if let error = error { print(error) } 


       } 


     } 

     @IBOutlet weak var StepCount: UILabel! 



} 
+0

你在哪裏呈現步驟標記? – KKRocks

回答

0

可以使用HKStatisticsQuery獲取今天的步驟。你現在可以在你的視圖控制器中使用getTodaysSteps方法並設置你的標籤的文本屬性。

雨燕3.1:

let healthStore = HKHealthStore() 

    func getTodaysSteps(completion: @escaping (Double) -> Void) { 
     let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)! 

     let now = Date() 
     let startOfDay = Calendar.current.startOfDay(for: now) 
     let predicate = HKQuery.predicateForSamples(withStart: startOfDay, end: now, options: .strictStartDate) 

     let query = HKStatisticsQuery(quantityType: stepsQuantityType, quantitySamplePredicate: predicate, options: .cumulativeSum) { (_, result, error) in 
      var resultCount = 0.0 

      guard let result = result else { 
       log.error("Failed to fetch steps = \(error?.localizedDescription ?? "N/A")") 
       completion(resultCount) 
       return 
      } 

      if let sum = result.sumQuantity() { 
       resultCount = sum.doubleValue(for: HKUnit.count()) 
      } 

      DispatchQueue.main.async { 
       completion(resultCount) 
      } 
     } 

     healthStore.execute(query) 
    } 

您可以調用此方法是這樣的:

override func viewDidLoad() { 
    super.viewDidLoad() 

    getTodaysStepCount { [weak self] steps in 
     self?.StepCount.text = "\(steps)" 
    } 
} 
+0

感謝!我有這個工作,但我不知道如何將getTodaysSteps分配給我的標籤 – Kayleigh

+0

添加了如何調用'getTodaysStepCount'方法的示例。請注意,你不應該用大寫字母命名你的變量。 'StepCount'應該是'stepCount'。 –

+0

非常感謝!我會檢查我的代碼並閱讀。感謝您的幫助! – Kayleigh