将 HealthKit 数据添加到一个值中
Adding HealthKit Data into one value
我正在使用 HealthKit
制作一个示例查询数据,例如步数。然而,当我在我的设备上测试它时,我得到了一堆不同的结果。现在因为我有来自不同来源和不同日期的结果,例如 [16 count, 50 count, .....]
。现在我想将所有数据加起来成为一个值。我将如何实现这一目标?例如,如果我对 HealthKit
进行示例查询,并且它 returns [15 count, 20 count]
我想 15 + 20 得到 35 计数。我该怎么做?
这是我用来查询数据的代码:
func getStepsHealthData() {
let stepsHealthDataQuery = HKSampleQuery(sampleType: stepsHealth, predicate: predicate, limit: Int(HKObjectQueryNoLimit), sortDescriptors: nil) {
(query, results, error) in
let stepsUnit = HKUnit.countUnit()
for result in (results as? [HKQuantitySample])! {
stepCount = result.quantity.doubleValueForUnit(stepsUnit)
}
}
healthKitStore?.executeQuery(stepsHealthDataQuery)
}
你绝对可以用 HKSampleQuery
做你想做的事,你只需要保留一个 totalSum
变量并迭代每个值。
那是说有一种特定的查询类型专门用于您想要做的事情,称为 HKStatisticsQuery
。根据文档:
Statistics queries perform statistical calculations over the set of
matching quantity samples
getTotalSteps
函数可以这样实现:
func getTotalSteps() {
let stepsType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!
let stepsUnit = HKUnit.countUnit()
let sumOption = HKStatisticsOptions.CumulativeSum
let statisticsSumQuery = HKStatisticsQuery(quantityType: stepsType, quantitySamplePredicate: nil,
options: sumOption)
{ (query, result, error) in
if let sumQuantity = result?.sumQuantity() {
let numberOfSteps = Int(sumQuantity.doubleValueForUnit(stepsUnit))
print(numberOfSteps)
}
}
healthStore.executeQuery(statisticsSumQuery)
}
HKStatisticsOptions.CumulativeSum
就可以了,剩下的代码与您所了解的 HKSampleQuery
.
没有太大区别
查看 docs for further reading and also take a look at the HKStatistics class,它提供了更多选项来执行与上一个一样的统计计算。
我正在使用 HealthKit
制作一个示例查询数据,例如步数。然而,当我在我的设备上测试它时,我得到了一堆不同的结果。现在因为我有来自不同来源和不同日期的结果,例如 [16 count, 50 count, .....]
。现在我想将所有数据加起来成为一个值。我将如何实现这一目标?例如,如果我对 HealthKit
进行示例查询,并且它 returns [15 count, 20 count]
我想 15 + 20 得到 35 计数。我该怎么做?
这是我用来查询数据的代码:
func getStepsHealthData() {
let stepsHealthDataQuery = HKSampleQuery(sampleType: stepsHealth, predicate: predicate, limit: Int(HKObjectQueryNoLimit), sortDescriptors: nil) {
(query, results, error) in
let stepsUnit = HKUnit.countUnit()
for result in (results as? [HKQuantitySample])! {
stepCount = result.quantity.doubleValueForUnit(stepsUnit)
}
}
healthKitStore?.executeQuery(stepsHealthDataQuery)
}
你绝对可以用 HKSampleQuery
做你想做的事,你只需要保留一个 totalSum
变量并迭代每个值。
那是说有一种特定的查询类型专门用于您想要做的事情,称为 HKStatisticsQuery
。根据文档:
Statistics queries perform statistical calculations over the set of matching quantity samples
getTotalSteps
函数可以这样实现:
func getTotalSteps() {
let stepsType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!
let stepsUnit = HKUnit.countUnit()
let sumOption = HKStatisticsOptions.CumulativeSum
let statisticsSumQuery = HKStatisticsQuery(quantityType: stepsType, quantitySamplePredicate: nil,
options: sumOption)
{ (query, result, error) in
if let sumQuantity = result?.sumQuantity() {
let numberOfSteps = Int(sumQuantity.doubleValueForUnit(stepsUnit))
print(numberOfSteps)
}
}
healthStore.executeQuery(statisticsSumQuery)
}
HKStatisticsOptions.CumulativeSum
就可以了,剩下的代码与您所了解的 HKSampleQuery
.
查看 docs for further reading and also take a look at the HKStatistics class,它提供了更多选项来执行与上一个一样的统计计算。