Я пытаюсь отобразить количество шагов текущего дня в первой строке 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
}
}