繁体   English   中英

SwiftUI 程序化导航。 如何使用绑定<bool>当方法需要绑定时<bool?> ?</bool?></bool>

[英]SwiftUI programmatic navigation. How to use Binding<Bool> when method expects Binding<Bool?>?

我正在 SwiftUI 应用程序中构建程序导航。 我想在 model 更改时打开屏幕,而不是在用户只需点击按钮时打开屏幕。 我想保持我的代码具有描述性,而没有不必要的选项。 问题是一些 SwiftUI 方法期望看到Binding<Bool?>而不是更具描述性的Binding<Bool> 例子:

class NavigationState: ObservableObject {
    @Published var showNextScreen: Bool = false
}

struct FirstView: View {
    @EnvironmentObject var navigationState: NavigationState

    var body: some View {
        NavigationLink("Show next screen",
                       destination: NextView(),
                       tag: true,
                       selection: $navigationState.showNextScreen)  // <--- Error: Cannot convert value of type 'Binding<Bool>' to expected argument type 'Binding<Bool?>'
    }
}

有没有办法通过将@Published var showNextScreen: Bool = false更改为 @Published var showNextScreen: Bool 来构建编程导航而不在整个应用程序中创建 ivar 选项@Published var showNextScreen: Bool? = false @Published var showNextScreen: Bool? = false因为将其更改为可选会使代码的描述性低于应有的水平。

有一个将Binding<V>转换为Binding<V?> 的初始化程序,因此您只需要执行以下操作:

NavigationLink("Show next screen",
               destination: NextView(),
               tag: true,
               selection: Binding($navigationState.showNextScreen))

有点相关的是,使用另一个初始化程序,您还可以将Binding<V?>转换为Binding<V>? (由我回答)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM