0
私はHealthkitから心拍情報を取得しようとしています。HealthStoreから心拍数を読み取る
私のプロフィールには心拍数のデータがあります。ここで
は私のクエリです:private func createStreamingQuery() -> HKQuery {
let predicate = HKQuery.predicateForSamples(withStart: NSDate() as Date, end: nil, options: [])
let query = HKAnchoredObjectQuery(type: heartRateType, predicate: predicate, anchor: nil, limit: Int(HKObjectQueryNoLimit)) {
(query, samples, deletedObjects, anchor, error) -> Void in
self.formatSamples(samples: samples)
}
query.updateHandler = { (query, samples, deletedObjects, anchor, error) -> Void in
self.formatSamples(samples: samples)
}
return query
}
そして今、私の関数形式のサンプル:
private func formatSamples(samples: [HKSample]?) {
guard let heartRateSamples = samples as? [HKQuantitySample] else { return }
guard let sample = heartRateSamples.first else{return}
let value = sample.quantity.doubleValue(for: self.heartRateUnit)
print("HeartRate: \(value)")
}
は、私はすでにデバッグと私が見つかりました。「formatSamples」のコードの最初の行では、リストのこと"サンプル"には多くの値があります。
guard let heartRateSamples = samples as? [HKQuantitySample] else { return }
このリストの最初の値を取得しようとすると、突然私の李stは空であり、関数を終了します。 Here->
guard let sample = heartRateSamples.first else{return}
サンプルリストは、次のいずれかに1つのラインから、それ自体で空に、なぜ私は理解していません。
クエリが実行されます。
@IBAction func readHeartRate(_ sender: Any) {
self.healthStore.execute(self.createStreamingQuery())
}
私を助けてくれますか?