Я пытаюсь получить оба шагаQuantityType и kjActiveQuantityType на определенную дату из HealthKit.
Я могу заставить оба запроса работать, если интересно, но при попытке запустить их вместе в одной и той же функции правило возвращается до завершения второго запроса, что дает ошибку индекса вне диапазона, поскольку индекс 1 массива имеет не был заполнен.
Любая помощь будет принята с благодарностью.
Я называю забавой c, используя
getTodaysStepsAndKJ { arrayData in
self.stepsHolder = arrayData[0]
self.kjHolder = arrayData[1] * 4.184
DispatchQueue.main.async {self.stepsLabel.text = arrayData[0].description;
self.kjLabel.text = (arrayData[1] * 4.184).description}
self.saveDataToCloud()
}
, а забавой c является
func getTodaysStepsAndKJ(completion: @escaping (Array<Double>) -> Void) {
let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
let kjActiveQuantityType = HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned)!
var resultArray = Array<Double>();
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, _ in
guard let result = result, let sum = result.sumQuantity() else {
resultArray.insert(0.0, at: 0)
completion(resultArray)
return
}
resultArray.insert(sum.doubleValue(for: HKUnit.count()), at: 0)
completion(resultArray)
}
let query2 = HKStatisticsQuery(quantityType: kjActiveQuantityType, quantitySamplePredicate: predicate, options: .cumulativeSum) { _, result, _ in
guard let result = result, let sum = result.sumQuantity() else {
resultArray.insert(0.0, at: 1)
completion(resultArray)
return
}
resultArray.insert(sum.doubleValue(for: HKUnit.kilocalorie()), at: 1)
completion(resultArray)
}
healthStore.execute(query)
healthStore.execute(query2)
}
При разделении и запуске в качестве двух функций они работают нормально.