为什么pop-to-root在这个示例代码SwiftUI中不起作用?

为什么pop-to-root在这个示例代码SwiftUI中不起作用?,swiftui,Swiftui,为了解决这个问题,我提供了最少的示例代码来重新创建bug。只需复制/粘贴它即可运行 导入快捷界面 最后一个类Popper:observateObject{ @已发布的变量shouldProceed:String?=nil 变量id:String init(id:String){self.id=id} } 结构ContentView:View{ @StateObject变量popper=popper(id:“根”) var body:一些观点{ 导航视图{ VStack(间距:40){ 文本(“您

为了解决这个问题,我提供了最少的示例代码来重新创建bug。只需复制/粘贴它即可运行

导入快捷界面
最后一个类Popper:observateObject{
@已发布的变量shouldProceed:String?=nil
变量id:String
init(id:String){self.id=id}
}
结构ContentView:View{
@StateObject变量popper=popper(id:“根”)
var body:一些观点{
导航视图{
VStack(间距:40){
文本(“您现在在根目录下”).font(.largeTitle)
文本(“点击此处转到V1”).ontapsignature{
popper.shouldProceed=“y”
}.foregroundColor(.blue)
NavigationLink(目标:V1().environmentObject(popper),
标签:“y”,
选择:$popper.shouldProceed){
EmptyView()
}
}
}
}
}
结构V1:视图{
@环境对象变量rootPopper:Popper
@StateObject变量v1Popper=Popper(id:“V1”)
var body:一些观点{
VStack(间距:40){
文本(“您现在在V1中”).font(.largeTitle)
文本(“点击此处可弹出到根目录”).ontapsignature{
打印(“弹出到:\(rootPopper.id)”)
rootPopper.shouldProceed=nil
}.foregroundColor(.red)
文本(“或点击此处转到V2”).ontapsignature{
v1Popper.shouldProceed=“y”
}.foregroundColor(.blue)
NavigationLink(目标:V2().environmentObject(v1Popper),
标签:“y”,
选择:$v1Popper.shouldProceed){
EmptyView()
}
}
}
}
结构V2:视图{
@环境对象变量v1Popper:Popper
@状态变量shouldProceed:字符串?=nil
var body:一些观点{
VStack(间距:40){
文本(“您现在在V2中”).font(.largeTitle)
文本(“点击此处可弹出V1”)。ontapsignature{
打印(“弹出到:\(v1Popper.id)”)
v1Popper.shouldProceed=nil
}.foregroundColor(.red)
文本(“或点击此处转到gotoV3”).ontapsignature{
shouldProceed=“y”
}.foregroundColor(.blue)
NavigationLink(目标:V3().environmentObject(v1Popper),
标记:“y”,选择:$shouldProceed){
EmptyView()
}
}
}
}
结构V3:视图{
@环境对象变量v1Popper:Popper
var body:一些观点{
VStack(间距:40){
文本(“您现在在V3中”).font(.largeTitle)
文本(“点击此处可弹出V1”)。ontapsignature{
打印(“弹出到:\(v1Popper.id)”)
v1Popper.shouldProceed=nil
}.foregroundColor(.red)
}
}
}
问题:当您进入V3屏幕时,为什么它不会弹出到V1屏幕?所有其他的pop函数都可以工作。当它进入V3屏幕时,由于某种原因它失败了。
请帮助。

尝试使用
.isDetailLink(false)
作为链接,如

NavigationLink(destination: V1().environmentObject(popper),
               tag: "y",
               selection: $popper.shouldProceed) {
    EmptyView()
}.isDetailLink(false)     // << here !!
导航链接(目标:V1().environmentObject(popper), 标签:“y”, 选择:$popper.shouldProceed){ EmptyView()
}.isdetallink(false)//我看不到任何文档说明这是为什么。你有什么解释吗?真的没有人对此做出解释吗?@FlowUI.SimpleUITesting.com,如果你想找到官方的答案,为什么没有人解释呢。根据经验,此标志会影响内部链接堆栈的构造方式-它要么是平面的(
isDetailLink==false
),然后所有标记都位于一个空间中-因此解决方案有效,要么是非平面的,然后每个显示的链接引入新的标记空间,我们观察到的行为与原始问题中的一样。