You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NavigationSplitView中NavigationStack+NavigationPath编译失败求助

解决「Cannot find '$router' in scope」编译错误

错误原因

你使用@Observable修饰的Router类作为环境对象,但在NavigationStack中尝试用$router.path获取绑定是错误的——$语法仅适用于SwiftUI内置的属性包装器(如@State、@Binding),对于通过@Environment(Router.self)获取的Observable类实例,需要通过Bindable类型来创建属性绑定。

解决方案

修改ThingListView中detail区块的NavigationStack初始化代码,将$router.path替换为Bindable(router).path:

detail: {
    NavigationStack(path: Bindable(router).path) {
        VStack {
            if let selectedThing = selectedThing {
                ThingDetailView(selectedThing: selectedThing)
            } else {
                PlaceholderView()
            }
        }
        .navigationDestination(for: Thing.self) { thing in
            ThingEditView(thing: thing)
        }
    }//nav
}

额外检查点

  1. 环境注入正确性:你的App结构体中,.environment(router)修饰在WindowGroup的父级Scene上,这是正确的,确保了整个窗口内的视图都能获取到Router实例。
  2. Observable类的使用:在其他视图(如ThingDetailView)中,直接修改router.path或调用router.navigateToRoot()即可触发导航更新,无需额外绑定语法——@Observable会自动跟踪属性变化并刷新视图。

内容的提问来源于stack exchange,提问作者JohnSF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:40:56