代码之家  ›  专栏  ›  技术社区  ›  LFHS

尝试使用HealthKit获取步骤,但它总是返回0.0

  •  0
  • LFHS  · 技术社区  · 7 年前

    here

    func getSteps(completion: @escaping (Double) -> Void) {
        let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
    
        let now = Date()
        let calendar = Calendar.current
        let halfHourAgoDate = calendar.date(byAdding: .minute, value: -30, to: now)
    
        if let date = halfHourAgoDate {
            let predicate = HKQuery.predicateForSamples(withStart: date, 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 {
                    completion(resultCount)
                    return
                }
    
                if let sum = result.sumQuantity() {
                    resultCount = sum.doubleValue(for: HKUnit.count())
                    return
                }
    
                DispatchQueue.main.async {
                    completion(resultCount)
                }
            }
    
            healthStore.execute(query)
    
        } else {
            print("Error MainVC, date is being cast as nil")
        }
    }
    

    当我实际尝试获取步骤时,以下是我的代码:

     var todaysSteps: Double = 0
     getSteps(completion: { (resultCount) -> Void in
                                    todaysSteps = resultCount
                                })
     print(todaysSteps) // always comes out to 0.0
    

    let healthStore = HKHealthStore()
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   LFHS    7 年前

    对于遇到相同问题的任何人,都需要在完成处理程序中执行代码,因此:

    var todaysSteps: Double = 0
    getSteps(completion: { (resultCount) -> Void in
                                print(resultCount)
    })