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+推荐方式)
这种方式更贴合新的导航架构,通过管理导航路径数组控制页面跳转:
- 声明导航路径状态:
@State private var navigationPath = NavigationPath() @EnvironmentObject var viewModel: AuthViewModel
- 绑定路径并配置导航规则:
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
相关产品推荐
相关产品推荐

