如何获取心电图电压测量值 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的主要内容,如果未能解决你的问题,请参考以下文章

PT100测温计算

华为哪个手环可以测心电图?

使用 STM32L422 上的内部参考电压测量模拟值

如何绘制模拟心电图?

最大钳位电压和额定钳位电压

emwin波形界面怎么修改刻度值