Comment get l'input de poids la plus récente à partir des données HealthKit

Comment puis-je get la plus récente input de poids à partir des données de Healthkit?

Mon code ne renvoie que la première input de poids jamais enregistrée.

Est-il possible d'get uniquement la dernière input enregistrée sans spécifier de plage de dates?

Voici mon code qui obtient la première input:

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<HKSampleType> = [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) } } 

Pour get l'input de poids du kit de santé:

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

Votre requête ne spécifie actuellement aucun descripteur de sorting. Vous devrez spécifier des descripteurs de sorting afin d'get les résultats de la requête dans l'ordre attendu. Vous pouvez en savoir plus à leur sujet dans la documentation de HKSampleQuery .

Merci à @Allan réponse, je returnne la dernière input enregistrée en spécifiant un sortDescriptor:

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