gpt4 book ai didi

swift - 按日期排序 HealthKit 数据

转载 作者:行者123 更新时间:2023-11-28 13:45:18 27 4
gpt4 key购买 nike

我正在尝试从 HealthKit 获取脉搏数据并按日期对它们进行排序以便在折线图中使用。我正在运行一个“for 循环”来获取正确的日期,并在将结果放入图表之前将结果放入一个数组中,但它们似乎是随机排列的,我不明白为什么。

class Pulse {
var pulse = 0.0
var startDate = Date()
}

var pulseData: [Pulse] = []
func getHeartBeatsForAWeek() {

for i in 1...7 {
getHeartBeats(startDate: date.getStartOfSpecificDateByAddingToToday(day: -i), endDate: date.getStartOfSpecificDateByAddingToToday(day: -i + 1))
}
}

func getHeartBeats(startDate: Date, endDate: Date) {
PulseHelper.shared.averageHearthRate(startDate: startDate, endDate: endDate) { (data) in
DispatchQueue.main.async {
self.pulseData.append(data)
self.updateGraph()
}
}
}

这是我获取心率的函数:

func averageHearthRate(startDate: Date, endDate: Date, completion: @escaping (Pulse) -> Void) {

let typeHeart = HKQuantityType.quantityType(forIdentifier: .heartRate)
let startDate = startDate
let endDate = endDate
let predicate: NSPredicate? = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: HKQueryOptions.strictEndDate)

let query = HKStatisticsQuery(quantityType: typeHeart!, quantitySamplePredicate: predicate, options: .discreteAverage, completionHandler: {(query: HKStatisticsQuery, result: HKStatistics?, error: Error?) -> Void in
DispatchQueue.main.async(execute: {() -> Void in
let quantity: HKQuantity? = result?.averageQuantity()
let beats: Double? = quantity?.doubleValue(for: HKUnit.count().unitDivided(by: HKUnit.minute()))
print("Got: \(String(format: "%.f", beats!)) from \(startDate)")

let pulse = Pulse.init()
pulse.pulse = beats!
pulse.startDate = startDate
completion(pulse)
})
})
PermissionsHelper.shared.store.execute(query)
}

这是我打印结果时得到的:

得到:82 从 2019-03-30 23:00:00 +0000

得到:74 从 2019-03-31 22:00:00 +0000

得到:73 从 2019-03-25 23:00:00 +0000

得到:74 从 2019-03-27 23:00:00 +0000

得到:70 从 2019-03-26 23:00:00 +0000

得到:74 从 2019-03-29 23:00:00 +0000

得到:108 从 2019-03-28 23:00:00 +0000

我希望它们按正确的顺序排列。

最佳答案

我找到了解决我自己问题的有效方法。我将保留这个问题,因为我对 Swift 还很陌生,而且我认为可能有比我做的更好的方法来做到这一点。

func getHeartBeats(startDate: Date, endDate: Date) {
PulseHelper.shared.averageHearthRate(startDate: startDate, endDate: endDate) { (data) in
DispatchQueue.main.async {
self.pulseData.append(data)
self.pulseData = self.pulseData.sorted(by: {$0.startDate < $1.startDate})
self.updateGraph()
}
}
}

所以我所做的不是使用带有心率的 Doubles 数组,而是创建了一个带有 pulse 和 startDate 的 Pulse 类,并使用

按日期对它们进行排序
self.pulseData.sorted(by: {$0.startDate < $1.startDate})

关于swift - 按日期排序 HealthKit 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55470415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com