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

SwiftUI视图切换异常:点击C按钮无法跳转至FinalView

SwiftUI视图切换不触发的问题分析与解决

问题根源

你把FinalView嵌套定义在了ContentView结构体内部。SwiftUI依赖视图类型的差异来触发视图树的更新,嵌套的结构体类型会被SwiftUI视为ContentView的关联类型,当你点击C按钮将c设为true时,SwiftUI无法正确识别到需要渲染的视图类型发生了变化,因此不会立即触发视图切换。只有当另一个@State变量a_or_b改变时,整个body才会重新计算,此时才会检测到c的状态变化,进而切换到FinalView。

解决方法

将FinalView从ContentView内部移出,作为独立的结构体定义即可。修改后的代码如下:

struct ContentView: View {
    @State private var c = false
    @State private var a_or_b: letter?
    
    enum letter {
        case a; case b
    }
    
    var body: some View {
        if c == true {
            FinalView(c: $c)
        } else {
            VStack {
                Text("First View")
                
                Button(action: {
                    a_or_b = .a
                }) {
                    Text("A")
                }
                
                Button(action: {
                    a_or_b = .b
                }) {
                    Text("B")
                }
                
                Button(action: {
                    c = true
                }) {
                    Text("C")
                }
            }
        }
    }
}

struct FinalView: View {
    @Binding var c: Bool
    
    var body: some View {
        Text("Second View!")
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:19:54