如何将可选模型对象传递到子视图中并知道是否已传递

问题描述 投票:0回答:1

我有一个需要使用模型对象的子视图,可以从现有锻炼列表或没有锻炼的情况下导航到该视图。我想要的功能是使用传递的锻炼(如果存在)或不立即创建锻炼并将其插入到 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 中。

swift swiftui swiftdata
1个回答
0
投票

尝试在 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)
}
© www.soinside.com 2019 - 2024. All rights reserved.