![](/img/trans.png)
[英]Is ti possible to `map` an enum to Binding<Bool> in SwiftUI?
[英]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.