Отображение шагов в текущие дни, а также дней прошедшей недели с помощью HealthKit - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь отобразить количество шагов текущего дня в первой строке UITableView. Я хотел бы, чтобы остальные строки были упорядочены в хронологическом порядке, начиная на 1 неделю с текущей даты. Каждая строка в UITableView должна содержать общее количество шагов за этот день. Я впервые использую HealthKit и не знаю, как добиться желаемых результатов.

  class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var tableView = UITableView()
var healthStore = HKHealthStore()
var currentDaySteps = [Double]()
let cellID = "cellID"

override func viewDidLoad() {
    self.getStepsCount(forSpecificDate: Date()) { (steps) in
        if steps == 0.0 {
        }
        else {
            DispatchQueue.main.async {
                self.currentDaySteps.append(steps)
            }
        }
    
    
           tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellID)
           tableView.dataSource = self
           tableView.delegate = self
           self.view.addSubview(tableView)
           super.viewDidLoad()
        }
   func getStepsCount(forSpecificDate:Date, completion: @escaping (Double) -> Void) {
   let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
   let (start, end) = self.getWholeDate(date: forSpecificDate)

   let predicate = HKQuery.predicateForSamples(withStart: start, end: end, options: .strictStartDate)

   let query = HKStatisticsQuery(quantityType: stepsQuantityType, quantitySamplePredicate: predicate, options: .cumulativeSum) { _, result, _ in
       guard let result = result, let sum = result.sumQuantity() else {
           completion(0.0)
           return
       }
       completion(sum.doubleValue(for: HKUnit.count()))
   }

   self.healthStore.execute(query)
 }

   func getWholeDate(date : Date) -> (startDate:Date, endDate: Date) {
   var startDate = date
   var length = TimeInterval()
   _ = Calendar.current.dateInterval(of: .day, start: &startDate, interval: &length, for: startDate)
   let endDate:Date = startDate.addingTimeInterval(length)
   return (startDate,endDate)
   }
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return currentDaySteps.count
     }
   
   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath as IndexPath)
       cell.textLabel!.text = "counts"
       return cell
   }
    }
...