Как конвертировать Binding связывать <Bool> - PullRequest
0 голосов
/ 24 марта 2020

Есть ли какой-нибудь удобный способ конвертировать Binding<Error?> в Binding<Bool>? У меня есть модель просмотра, которая имеет одно из свойств @published var error: Error?. Я хотел бы показать предупреждение, если есть ошибка. Но Alert принимает только Binding<Bool> в качестве параметра.

Я смог выполнить sh, используя другое свойство, но мне кажется, что это не самый эффективный способ.

Код с дополнительным свойством

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")))
        }
    }
}

1 Ответ

2 голосов
/ 24 марта 2020

Использование 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")))
        }
    }
}
...