如何从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 ... }