如何从HealthKit数据中获取最新的Weight项

如何从healthkit数据中获取最新的权重条目?

我的代码只返回有史以来的第一个重量输入。

是否可以只记录最后一个条目而不指定日期范围?

这是我的代码获得第一个条目:

class HealthStore { private let healthStore = HKHealthStore() private let bodyMassType = HKSampleType.quantityType(forIdentifier: .bodyMass)! func authorizeHealthKit(completion: @escaping ((_ success: Bool, _ error: Error?) -> Void)) { if !HKHealthStore.isHealthDataAvailable() { return } let readDataTypes: Set = [bodyMassType] healthStore.requestAuthorization(toShare: nil, read: readDataTypes) { (success, error) in completion(success, error) } } //returns the weight entry in Kilos or nil if no data func bodyMassKg(completion: @escaping ((_ bodyMass: Double?, _ date: Date?) -> Void)) { let query = HKSampleQuery(sampleType: bodyMassType, predicate: nil, limit: 1, sortDescriptors: nil) { (query, results, error) in if let result = results?.first as? HKQuantitySample { let bodyMassKg = result.quantity.doubleValue(for: HKUnit.gramUnit(with: .kilo)) completion(bodyMassKg, result.endDate) return } //no data completion(nil, nil) } healthStore.execute(query) } } 

从健康套件中获取体重:

 healthstore.authorizeHealthKit { (success, error) in if success { //get weight self.healthstore.bodyMass(completion: { (bodyMass, bodyMassDate) in if bodyMass != nil { print("bodyMass: \(bodyMass) date: \(bodyMassDate)") } }) } } 

您的查询当前未指定任何排序描述符。 您需要指定排序描述符,以便按照预期的顺序获取查询结果。 您可以在HKSampleQuery 文档中阅读有关它们的HKSampleQuery 信息 。

感谢@Allan的回答,我通过指定sortDescriptor返回最后记录的条目:

  let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false) let query = HKSampleQuery(sampleType: bodyMassType, predicate: nil, limit: 1, sortDescriptors: [sortDescriptor]) { (query, results, error) in ... }