像HKStatisticsQuery
、HKSampleQuery
和HKStatisticsCollectionQuery
这样的apple healthkit查询是异步运行的,还是需要在一个单独的线程中显式运行这些查询?
我只是用下面的异步方式编写了查询,它工作正常。我想知道我是否应该把它放在一个异步块中
private func readOxygrnSaturation(){
dispatchGroup.enter()
let quantityType = HKObjectType.quantityType(forIdentifier: .oxygenSaturation)!
let sampleQuery = HKSampleQuery.init(sampleType: quantityType,
predicate: nil,
limit: HKObjectQueryNoLimit,
sortDescriptors: nil,
resultsHandler: { (query, results, error) in
guard let samples = results as? [HKQuantitySample] else {
print(error!)
return
}
for sample in samples {
let mSample = sample.quantity.doubleValue(for: HKUnit(from: "%"))
self.oxygenSaturation.append(HealthData(unit: "%", startDate: self.dateFormatter.string(from: sample.startDate) , endDate: self.dateFormatter.string(from: sample.endDate), value: mSample))
}
self.dispatchGroup.leave()
})
self.healthStore .execute(sampleQuery)
}
1条答案
按热度按时间y53ybaqx1#
在iOS上,HealthKit查询是异步运行的,不需要在单独的线程中运行。
若要执行HealthKit查询,您将创建一个HKQuery对象,然后调用HKHealthStore方法execute(_:)来执行查询。此方法立即返回,查询结果将通过您提供的完成处理程序返回给您。
以下是如何执行HKStatisticsQuery的示例:
此代码创建一个HKStatisticsQuery对象,然后通过调用HKHealthStore的execute(_:)方法来执行该对象。完成处理程序作为HKStatisticsQuery初始值设定项的闭包提供,并在查询完成执行时调用该处理程序。