我有一个需要使用模型对象的子视图,可以从现有锻炼列表或没有锻炼的情况下导航到该视图。我想要的功能是使用传递的锻炼(如果存在)或不立即创建锻炼并将其插入到 modelContext 中,以便我可以利用我的 SwiftData 关系。
到目前为止,我已经尝试使用 init 来实现此目的:
var workout : Workout
var passedWorkout : Workout?
//If a workout was passed we assign it and if it was not we create a new one
init() {
if let unwrappedWorkout = passedWorkout {
workout = unwrappedWorkout
}
else {
workout = Workout(id: UUID())
print("inserting \(workout.id)")
modelContext.insert(workout)
}
}
但随后它期望锻炼能够通过,所以我尝试将锻炼更改为@State,但它仍然说它期望它被传递,我还尝试将此代码从 init 移动到 onAppear ,它产生了相同的错误。如何将可选值传递给子视图,然后在创建视图后立即将其展开以插入到 modelContext 中。
尝试在 onAppear 中编写此展开逻辑。在父视图中使用状态变量来传递passedWorkout。
var body: some View {
Text("Workout View")
.onAppear {
if let unwrappedWorkout = passedWorkout {
workout = unwrappedWorkout
} else {
workout = Workout(id: UUID())
print("inserting \(workout.id)")
modelContext.insert(workout)
}
}
}
父视图内部
@State private var workout: Workout?
var body: some View {
SubView(passedWorkout: workout)
}