【发布时间】:2021-12-07 03:47:50
【问题描述】:
使用可选状态参数导航真的让我很困惑。下面的代码无法编译,因为selectedObject 必须为零合并,因为它是NextView 的要求,但我没有什么可以合并它的。 NextView 需要此参数,因此无法编译可选。 MyObject 是一个具有所有必需属性的结构,所以我没有空的构造函数。我正在使用selected 状态来管理导航何时发生,但由于可选对象,它仍然无法编译。
struct MyView: View {
@EnvironmentObject var model: Model
@State var selected = false
@State var selectedObject: MyObject? // optional because there isn't one until it's set by the child view
var body: some View {
NavigationLink(destination: NextView(object: $selectedObject), isActive: self.$selected) {
EmptyView()
}
// ... child view that when interacted with sets the selectedObject as a binding ... //
}
}
struct MyObject: Identifiable, Codable {
var property1: String
var property2: String
// .... many more ...
}
struct NextView: View {
@Binding var object: MyObject // required binding
var body: some View {
Text("some stuff about my object")
}
}
【问题讨论】:
-
selectedObject 将如何获得价值?哪些动作或步骤使 selectedObject 获得了一些真正的价值? PS:您的问题很简单,但您需要确保我们可以为自己创建问题!我认为它缺少创建问题所需的代码。
-
几个选项: 1) 传入
Binding<MyObject?>而不是Binding<MyObject>; 2) 做一个懒惰的NavigationLink并强制解包,如果你可以确定selectedObject永远不会是nil; 3) 如果selectedObject是nil,则创建一个自定义绑定以传递一些其他MyObject。由你决定如何做