2017-05-29 163 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