I've a SwiftUI View
which requires a Binding<Model>
for initialization. That model needs to be passed from a List
, when user selects it. The selection parameter in a list initializer requires that model be optional, so the actual data type is Binding<Model?>
.
Now how do I unwrap this optional and pass it to my View
?
Here's how I tried to solve it by writing a simple wrapper view.
struct EditModelViewWrapper: View {
@Binding var selectedModel: Model?
@State var temperorayModel: Model = DataModel.placeholder
init(selectedModel: Binding<Model?>) {
self._selectedModel = selectedModel
}
var body: some View {
if selectedModel == nil {
Text("Kindly select a value in the list to start editing.")
} else {
EditModelView(model: boundModel)
}
}
var boundModel: Binding<Model> {
temperorayModel = $selectedModel.wrappedValue!
return $temperorayModel
}
}
When I run this code, I get the following warning at the line, where I set value to temperoryModel
.
Modifying state during view update, this will cause undefined behavior.
PS: I don't want to pause an Optional
to my View
and check it inside for two reasons. It will require a lot of nil
checks inside the view and I have to update a lot of other files in my app, where I have used that view.