swalkner
swalkner

Reputation: 17329

Swift Combine: how to create custom sink?

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?

Upvotes: 3

Views: 801

Answers (1)

Daniel T.
Daniel T.

Reputation: 33967

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

Upvotes: 2

Related Questions