如何解开可选绑定并将值传递给另一个视图?

时间:2020-10-31 13:27:56

标签: ios swift swiftui

我有一个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检查,并且我必须在使用该视图的应用程序中更新许多其他文件。

1 个答案:

答案 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 !!
    }
}