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

iOS 16中Xcode Swift导航链接旧方法废弃后的正确写法咨询

先修正你代码里的两个基础错误:

  • @EnvirnmentObject拼写错误,正确写法是@EnvironmentObject
  • 声明@EnvironmentObject时不能加()初始化,它是从父视图注入的,无需在此处创建实例

针对iOS16废弃的NavigationLink(destination:isActive:label:),提供两种适配方案:

方案一:保留isActive绑定(适配iOS16+)

需要将视图层级包裹在NavigationStack内,同时确保isActive绑定的是Bool类型(如果你的viewModel.user是可选类型,可通过$viewModel.user.isPresent转换为Bool绑定)

修正后的代码示例:

@EnvironmentObject var viewModel: AuthViewModel

var body: some View {
    NavigationStack {
        NavigationLink(isActive: $viewModel.user.isPresent) {
            ProfileView()
        } label: {
            // 可添加触发导航的视图,比如按钮或文本
            Text("进入个人主页")
        }
    }
}

方案二:使用NavigationStack路径导航(iOS16+推荐方式)

这种方式更贴合新的导航架构,通过管理导航路径数组控制页面跳转:

  1. 声明导航路径状态:
@State private var navigationPath = NavigationPath()
@EnvironmentObject var viewModel: AuthViewModel
  1. 绑定路径并配置导航规则:
var body: some View {
    NavigationStack(path: $navigationPath) {
        NavigationLink(value: "profile") {
            Text("进入个人主页")
        }
        .navigationDestination(for: String.self) { value in
            if value == "profile" {
                ProfileView()
            }
        }
    }
    // 监听user状态变化,自动触发导航
    .onChange(of: viewModel.user) { user in
        if user != nil {
            navigationPath.append("profile")
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:35:42