HKLiveWorkoutBuilder는 활성 운동 세션으로부터 실시간 데이터를 기반으로 운동을 점진적으로 구성하는 빌더 객체입니다
HKLiveWorkoutBuilder는 HealthKit 프레임워크에서 사용되는 클래스로, 운동에 관련된 데이터를 실시간으로 처리하고 저장하는 데 사용됩니다. 이 클래스는 사용자의 운동 활동 중에 발생하는 데이터를 실시간으로 수집하고, 이를 HealthKit에 저장하거나 다른 처리 작업에 사용할 수 있게 해줍니다.
활성화된 HKWorkoutSession 중에 HKLiveWorkoutBuilder를 사용하여 HKWorkout 샘플을 생성하세요. Apple Watch에서 운동 세션을 실행하는 완벽한 지침은 "운동 세션 실행"을 참조하세요.
live workout builder 구성하기
var dataSource: HKLiveWorkoutDataSource?
: 운동 세션으로부터 자동적으로 제공받는 실시간 데이터
var workoutSession: HKWorkoutSession?
: 데이터 소스에 의해 생성되고 이 빌더와 관련된 운동 세션
운동을 모니터링하고 제어하기
var delegate: (any HKLiveWorkoutBuilderDelegate)?
: 실시간 builder delegate
delegate 로 실시간 데이터 추적하기
func workoutBuilder(HKLiveWorkoutBuilder, didCollectDataOf: Set<HKSampleType>)
: 새로운 데이터가 builder에 추가됐다고 delegate에 전달하여 콜백됩니다
func workoutBuilderDidCollectEvent(HKLiveWorkoutBuilder)
: 새로운 이벤트가 builder에 추가됐다고 delegate에 전달하여 콜백됩니다
func workoutBuilder(HKLiveWorkoutBuilder, didBegin: HKWorkoutActivity)
: 운동 활동이 시작됐다고 delegate에 전달하여 콜백됩니다
func workoutBuilder(HKLiveWorkoutBuilder, didEnd: HKWorkoutActivity)
: 현재 운동 활동이 끝났다고 delegate에 전달하여 콜백됩니다.
protocol HKLiveWorkoutBuilderDelegate
: 실시간 workout builder를 모니터링하기 위한 프로토콜.
var currentWorkoutActivity: HKWorkoutAcitivity: HKWorkoutActivity?
: 현재 운동 활동
var shouldCollectWorkoutEvents: Bool
: workout builder가 운동 세션에서 생성된 이벤트를 자동으로 추가할지 여부를 결정하는 Bool 값입니다.
데이터에 접근하기
var elapsedTime: TimeInterval
: 일시 정지를 포함한 builder의 현재 내용을 기반으로 한 운동 경과 시간.
HKLiveWorkoutBuilder를 사용하여 실시간 운동 데이터를 처리하는 과정
1. HKLiveWorkoutBuilder 객체 생성: HKWorkoutSession 객체를 사용하여 HKLiveWorkoutBuilder 객체를 생성합니다. 이를 통해 실시간으로 운동 데이터를 수집하고 저장할 수 있는 환경을 설정합니다.
var builder: HKLiveWorkoutBuilder?
2. 데이터 수집 시작: HKLiveWorkoutBuilder의 beginCollection(withStart:) 메서드를 호출하여 데이터 수집을 시작합니다. 이 메서드는 운동 활동이 시작된 시간을 인수로 받습니다.
builder.beginCollection(withStart: Date()) { (success, error) in
guard success else {
// Handle errors.
}
// Indicate that the session has started.
}
3. 데이터 수집 및 처리: 운동 중에 발생하는 데이터(예: 심박수, 거리, 칼로리 소모 등)를 HKLiveWorkoutBuilder 객체에 전달하여 처리합니다. 이 과정은 주로 HKLiveWorkoutBuilderDelegate 프로토콜을 채택한 객체에서 수행됩니다. 예를 들어, workoutBuilder(_:didCollectDataOf:) 메서드를 구현하여 수집된 데이터를 처리할 수 있습니다.
func workoutBuilder(_ workoutBuilder: HKLiveWorkoutBuilder, didCollectDataOf collectedTypes: Set<HKSampleType>) {
for type in collectedTypes {
guard let quantityType = type as? HKQuantityType else {
return // Nothing to do.
}
// Calculate statistics for the type.
let statistics = workoutBuilder.statistics(for: quantityType)
let label = labelForQuantityType(quantityType)
DispatchQueue.main.async() {
// Update the user interface.
}
}
}
4. 데이터 저장 및 완료: 운동이 종료되면 HKLiveWorkoutBuilder 객체의 finishWorkout(completion:) 메서드를 호출하여 데이터 수집을 완료하고, 최종적으로 HealthKit에 데이터를 저장합니다. 이 메서드는 완료될 때 호출할 클로저를 인수로 받습니다.
session.end()
builder.endCollection(withEnd: Date()) { (success, error) in
guard success else {
// Handle errors.
}
builder.finishWorkout { (workout, error) in
guard workout != nil else {
// Handle errors.
}
DispatchQueue.main.async() {
// Update the user interface.
}
}
}
이러한 과정을 통해 HKLiveWorkoutBuilder를 사용하여 실시간으로 운동 데이터를 처리하고 저장할 수 있습니다. 이 클래스는 HealthKit을 사용하여 트랙킹된 운동 데이터를 효율적으로 관리하고 활용하는 데 도움을 줍니다.
'SwiftUI' 카테고리의 다른 글
HKQuantityType (0) | 2024.03.11 |
---|---|
HKLiveWorkoutDataSource (0) | 2024.03.11 |
HKWorkoutSession (0) | 2024.03.11 |
HKHealthStore (0) | 2024.03.11 |
Alamofire (0) | 2024.03.11 |