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

为何SwiftUI的.fullScreenCover需Binding而非普通Bool类型?

为什么SwiftUI的fullScreenCover(isPresented:)需要传入Binding而非普通Bool?

我理解SwiftUI中的sheet需要通过Binding来反馈其关闭状态(比如滑动手势关闭时同步更新外部状态),但一直疑惑为什么fullScreenCover(isPresented:)也要求传入Binding,而不是普通的Bool值。

我原本认为fullScreenCover没有内置的关闭方式,用户或iOS系统都无法直接触发它的关闭逻辑,似乎用普通Bool参数就足够了,比如下面这个示例:

struct CoverTestView: View {
    @State var visible: Bool = false
    
    var body: some View {
        // 传入普通Bool而非Binding
        CoverView(visible: visible)
        
        Button("Toggle") {
            visible.toggle()
        }
    }
}

struct CoverView: View {
    let visible: Bool
    
    var body: some View {
        if visible {
            Text("Hello, World!")
        }
    }
}

那这里要求传入Binding的作用到底是什么?

当然,用户肯定需要关闭弹窗的方式,但我觉得Binding应该是在弹窗内容视图中使用,而非fullScreenCover本身,比如下面这种写法:

struct CoverTestView: View {
    @State var visible: Bool = false
    
    var body: some View {
        Button("Toggle") {
            visible.toggle()
        }
        .fullScreenCover(isPresented: visible) {
            CoverView(visible: $visible)
        }
    }
}

struct CoverView: View {
    @Binding var visible: Bool
    
    var body: some View {
        Text("Hello, World!")
        Button("Dismiss") {
            visible = false
        }
    }
}

我相信iOS工程师这么设计必然有其原因,我到底忽略了什么关键点?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:47:17