以下の (簡略化された) コードに似たアプリ アーキテクチャがあります。WorkoutManager
StateObject
設定ビューで初期化するを使用し、を介してその子に渡しEnvironmentObject
ます。問題は、新しいワークアウトを連続して開始できるようにするために必要.sheet
な新しい を初期化するライフサイクル イベントがないことです。WorkoutManager
以下の例WorkoutView
では、WorkoutManager を再初期化してクリーンなオブジェクトにする機能をどのように与えることができますか?
import SwiftUI
import HealthKit
class WorkoutManager: ObservableObject {
var workout: HKWorkout?
}
struct ContentView: View {
@StateObject var workoutManager = WorkoutManager()
@State var showingWorkoutView = false
var body: some View {
Button {
showingWorkoutView.toggle()
} label: {
Text("Start Workout")
}
.sheet(isPresented: $showingWorkoutView) {
WorkoutView(showingWorkoutView: $showingWorkoutView)
}
}
}
struct WorkoutView: View {
@EnvironmentObject var workoutManager: WorkoutManager
@Binding var showingWorkoutView: Bool
var body: some View {
Text("Workout Started")
.padding()
Button {
showingWorkoutView.toggle()
//Here I want to initialize a new WorkoutManager to clear out the previous workout's state, how?
} label: {
Text("End Workout")
}
}
}