Swift Combine: how to create custom sink?

Viewed 629

I'm using RxSwift with something like the following

extension Reactive where Base: UIViewController {

    public var showError: Binder<Error> {
        return Binder(self.base) { element, error in
            let alertVC = // create UIAlertController with error
            element.present(alertVC, animated: true)
        }
    }

What's the best way to build something like this with Swift Combine?

1 Answers

It's built in. You don't need to make a Bindable... Just do:

cancelable = publisher.assign(to: \.title, on: barButtonItem)

In answer to your edited question:

extension UIViewController {
    var showError: Subscribers.Sink<Error, Never> {
        return Subscribers.Sink<Error, Never>(
            receiveCompletion: { _ in },
            receiveValue: { [unowned self] error in
                let alertVC = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert)
                self.present(alertVC, animated: true)
            }
        )
    }
}
Related