2016-08-02 51 views
2

我有這種方法可以從HealthKit中讀取今天的步驟。使用Swift從HealthKit讀取日期間隔的步驟

func todaySteps(completion: (Double, NSError?) ->()) 
{ // this function gives you all of the steps the user has taken since the beginning of the current day. 

    let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount) // The type of data we are requesting 


    let date = NSDate() 
    print(date) 
    let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    let newDate = cal.startOfDayForDate(date) 
    print(newDate) 
    let predicate = HKQuery.predicateForSamplesWithStartDate(newDate, endDate: NSDate(), options: .None) // Our search predicate which will fetch all steps taken today 

    // The actual HealthKit Query which will fetch all of the steps and add them up for us. 
    let query = HKSampleQuery(sampleType: type!, predicate: predicate, limit: 0, sortDescriptors: nil) { query, results, error in 
     var steps: Double = 0 

     if results?.count > 0 
     { 
      for result in results as! [HKQuantitySample] 
      { 
       steps += result.quantity.doubleValueForUnit(HKUnit.countUnit()) 
      } 
     } 

     completion(steps, error) 
    } 

    executeQuery(query) 
} 

現在讓我們說,如果我想從1月/ 6/2016每天讀的總步驟,以7月/ 6/2016

我如何能做到這一點,請指引我感謝

回答

1

使用這得到多個日期的步驟

func MultipleDaysStepsAndActivities(_ startDate:Date, completion: @escaping (NSDictionary, [HealthKitManuallActivity], NSError?) ->()) { 

    let calender = NSCalendar.current 
    let now = Date() 
    _ = calender.component(.year, from: now) 

    let type = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount) // The type of data we are requesting 
    let predicate = HKQuery.predicateForSamples(withStart: startDate, end: now, options: HKQueryOptions()) 

    var interval = DateComponents() 
    interval.day = 1 

    let query = HKStatisticsCollectionQuery(quantityType: type!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: startDate, intervalComponents:interval) 

    query.initialResultsHandler = { query, results, error in 

     if error != nil { 
      print(error as Any) 
      return 
     } 

     var dict:[String:Double] = [:] 

     if let myResults = results { 
      myResults.enumerateStatistics(from: startDate, to: now) { 
       statistics, stop in 

       if let quantity = statistics.sumQuantity() { 

        let steps = quantity.doubleValue(for: HKUnit.count()) 
        print("Steps = \(steps.rounded())") 
        dict[self.fmt.string(from: statistics.startDate)] = steps.rounded() 
       } 
      } 
     } 

    } 

    execute(query) 

}