SwiftUI中能否通过Route枚举向NavigationStack传递变量?
你的代码错误核心在于:处理枚举.first分支时没有提取它的关联值,导致无法访问input变量。以下是修正后的完整代码及关键说明:
修正后的代码
@available(iOS 16.0, *) enum Route: Hashable { case first(input: String) @ViewBuilder func view(_ path: Binding<NavigationPath>) -> some View { switch self { // 通过模式匹配提取关联值input case .first(let input): AView1(output: input) } } } @available(iOS 16.0, *) struct AView1: View { // 外部传入的静态展示值用let即可,无需@State let output: String @State private var path: NavigationPath = .init() var body: some View { NavigationStack(path: $path) { VStack { Text(output) NavigationLink(value: Route.first(input: "Hello"), label: { Text("Click") }) } .navigationDestination(for: Route.self) { route in route.view($path) } } } }
关键修改说明
- 提取枚举关联值:在
switch分支中使用case .first(let input):的语法,把枚举关联的字符串值提取出来,才能传递给视图的参数。 - 优化视图变量声明:如果
output只是用于展示、不需要在视图内部修改,直接用let声明即可;如果后续需要修改这个值,可以改为@State并通过初始化方法赋值:
struct AView1: View { @State private var output: String init(output: String) { _output = State(initialValue: output) } // 其余代码不变 }
内容的提问来源于stack exchange,提问作者micah
相关产品推荐
相关产品推荐

