如何获取心电图电压测量值 HKElectrocardiogram.VoltageMeasurement iOS 14
Posted
技术标签:
【中文标题】如何获取心电图电压测量值 HKElectrocardiogram.VoltageMeasurement iOS 14【英文标题】:How to get ECG Voltage Measurements HKElectrocardiogram.VoltageMeasurement iOS 14 【发布时间】:2020-08-06 21:26:54 【问题描述】:我正在尝试使用 ios 14 中的新 API 从 Apple HealthKit 获取 ECG 的单个电压测量值。
我已经设法使用了:
let ecgQuery = HKSampleQuery(sampleType: HKObjectType.electrocardiogramType(), predicate: samplePredicate, limit: 0, sortDescriptors: [sortDescriptor]) (query, results, error) in
这让我得到了一个HKElectrocardiogram 对象。从这里我可以看到平均心率、心电图分类等......
我现在认为我需要将该对象传递给 HKElectrocardiogramQuery,如下所示:
let ecgSample = HKElectrocardiogramQuery(ecg) (query, result) in
但我找不到从结果数据处理程序中提取数据的任何方法。如果我在结果上打印,它会执行很多次,但我无法提取数据。结果的类型为 HKElectrocardiogramQuery.Result
Apple 开发者网站上的文档非常粗略,提供的示例为零。不过,Apple 在 WWDC 2020 上的 What's New In HealthKit 演讲中提到了该功能。非常感谢您提供任何帮助。
干杯
【问题讨论】:
【参考方案1】:根据可用的documentation,需要切换结果才能得到测量值
let query = HKElectrocardiogramQuery(ecg) (query, result) in
switch result
case .error(let error):
print("error: ", error)
case .measurement(let value):
print("value: ", value)
case .done:
print("done")
store.execute(query)
【讨论】:
谢谢,我已经解决了 switch 位,但之前没有将这种语法用于“let value”位。不过效果很好。【参考方案2】:如果有人想要完整的示例代码,那就是:
if #available(iOS 14.0, *)
let predicate = HKQuery.predicateForSamples(withStart: Date.distantPast,end: Date.distantFuture,options: .strictEndDate)
let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)
let ecgQuery = HKSampleQuery(sampleType: HKObjectType.electrocardiogramType(), predicate: predicate, limit: 0, sortDescriptors: [sortDescriptor]) (query, samples, error) in
guard let samples = samples,
let mostRecentSample = samples.first as? HKElectrocardiogram else
return
print(mostRecentSample)
var ecgSamples = [(Double,Double)] ()
let query = HKElectrocardiogramQuery(mostRecentSample) (query, result) in
switch result
case .error(let error):
print("error: ", error)
case .measurement(let value):
print("value: ", value)
let sample = (value.quantity(for: .appleWatchSimilarToLeadI)!.doubleValue(for: HKUnit.volt()) , value.timeSinceSampleStart)
ecgSamples.append(sample)
case .done:
print("done")
self.healthMonitor.healthStore.execute(query)
healthMonitor.healthStore.execute(ecgQuery)
else
// Fallback on earlier versions
【讨论】:
以上是关于如何获取心电图电压测量值 HKElectrocardiogram.VoltageMeasurement iOS 14的主要内容,如果未能解决你的问题,请参考以下文章