【Swift】HealthKitの睡眠(SleepAnalysis)データを取得して表示する

HealthKitの睡眠(SleepAnalysis)データを取得・表示する方法について記載します。

Xcodeで HealthKit の設定を行っていない場合は、以下の設定も行ってください。

HealthKitデータの読み込み・書き込みの設定方法について

睡眠データの取得方法

環境

・iOS14.4

・Xcode 12.4

デモ

最後に記載しているコードを実行すると以下のように表示されます。

1 や 0 は 睡眠の状態を表しています。

inBed: 0
asleep: 1

状態の定義は、こちらのサイトに記載されています。

HKCategoryValueSleepAnalysis

ポイント1:権限のリクエスト

権限のリクエストには “HKCategoryTypeIdentifier.sleepAnalysis” を指定します。

ポイント2:睡眠データの取得

権限のリクエストが成功した場合、睡眠データを取得することができます。
次のように、HKSampleQuery を生成し実行するとデータを取得できます。

サンプルコード

サンプルコードは次の構成になっています。

ContentView.swift
取得データをリストで表示します。
ContentViewModel で格納される dataSource配列 の値を参照してリストを生成します。

ContentViewModel.swift
睡眠データを取得します。
取得した睡眠データは、1データずつ ListRowItem構造体に格納し、dataSource配列に追加します。

ListRowItem.swift
取得した睡眠データを格納するための構造体です。

ContentView.swift

ContentViewModel.swift

ListRowItem.swift