如何将 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")))
        }
    }
}