如何将 Binding<Error?> 转换为 Binding<Bool>
How to convert Binding<Error?> to Binding<Bool>
有什么方便的方法可以将 Binding<Error?>
转换为 Binding<Bool>
吗?我的视图模型具有 属性 @published var error: Error?
之一。如果有错误,我想显示警报。但是 Alert
只接受 Binding<Bool>
作为参数。
我可以通过引入另一个 属性 来实现这一点,但在我看来这不是最有效的方法。
带有附加 属性
的代码
class SampleViewModel: ObservableObject {
@Published
var error: Error? {
didSet {
isError = error != nil
}
}
@Published
var isError: Bool = false
}
struct SampleView: View {
@ObservedObject
var viewModel: SampleViewModel
var body: some View {
EmptyView().alert(isPresented: $viewModel.isError) { () -> Alert in
Alert(title: Text("Error"), message: Text(viewModel.error!.localizedDescription), dismissButton: .default(Text("OK")))
}
}
}
使用Binding<Bool>.constant($viewModel.error.wrappedValue != nil)
class SampleViewModel: ObservableObject {
@Published
var error: Error?
}
struct SampleView: View {
@ObservedObject
var viewModel: SampleViewModel
var body: some View {
let isError = Binding<Bool>.constant($viewModel.error.wrappedValue != nil)
return EmptyView().alert(isPresented: isError) { () -> Alert in
Alert(title: Text("Error"), message: Text(viewModel.error!.localizedDescription), dismissButton: .default(Text("OK")))
}
}
}
有什么方便的方法可以将 Binding<Error?>
转换为 Binding<Bool>
吗?我的视图模型具有 属性 @published var error: Error?
之一。如果有错误,我想显示警报。但是 Alert
只接受 Binding<Bool>
作为参数。
我可以通过引入另一个 属性 来实现这一点,但在我看来这不是最有效的方法。
带有附加 属性
的代码class SampleViewModel: ObservableObject {
@Published
var error: Error? {
didSet {
isError = error != nil
}
}
@Published
var isError: Bool = false
}
struct SampleView: View {
@ObservedObject
var viewModel: SampleViewModel
var body: some View {
EmptyView().alert(isPresented: $viewModel.isError) { () -> Alert in
Alert(title: Text("Error"), message: Text(viewModel.error!.localizedDescription), dismissButton: .default(Text("OK")))
}
}
}
使用Binding<Bool>.constant($viewModel.error.wrappedValue != nil)
class SampleViewModel: ObservableObject {
@Published
var error: Error?
}
struct SampleView: View {
@ObservedObject
var viewModel: SampleViewModel
var body: some View {
let isError = Binding<Bool>.constant($viewModel.error.wrappedValue != nil)
return EmptyView().alert(isPresented: isError) { () -> Alert in
Alert(title: Text("Error"), message: Text(viewModel.error!.localizedDescription), dismissButton: .default(Text("OK")))
}
}
}