我有一个SwiftUI View
,需要Binding<Model>
进行初始化。当用户选择模型时,需要从List
传递模型。列表初始值设定项中的selection参数要求该模型是可选的,因此实际数据类型为Binding<Model?>
。
现在如何解开此可选内容并将其传递给我的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
}
}
运行此代码时,在此行将值设置为temperoryModel
时收到以下警告。
在视图更新期间修改状态,这将导致未定义的行为。
PS:我不想将Optional
暂停到View
并在里面检查它有两个原因。在视图中将需要进行大量nil
检查,并且我必须在使用该视图的应用程序中更新许多其他文件。
答案 0 :(得分:1)
您不需要boundModel
来代替它,
var body: some View {
if selectedModel == nil {
Text("Kindly select a value in the list to start editing.")
} else {
EditModelView(model: Binding(selectedModel)!) // << here !!
}
}