为何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
相关产品推荐
相关产品推荐

