使用可选状态参数导航真的让我很困惑。下面的代码不会编译,因为selectedObject
必须是nil合并的,因为它是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
将在链接激活时出现,那么您可以通过即时创建的绑定(如(来解决这种情况
NavigationLink(destination: NextView(object:
Binding(
get: {selectedObject!},
set: {selectedObject = $0}
)), isActive: self.$selected) { EmptyView()
}