Есть ли способ убедить Observable.bind и что-то вроде сгиба? - PullRequest
0 голосов
/ 05 февраля 2019

Так что мне было интересно, когда я пишу viewModel с использованием RxSwift, есть ли способ объединить связывание и сворачивание, чтобы у вас была подпись, подобная этой

someObservable.bind(someCondition, firstObserver,secondObserver)

, это заменит код, подобный

someObservable
    .filter { continionIsTrue }
    .bind(to: firstObserver)
    .disposed(by: disposeBag)

someObservable
    .filter { conditionIsFalse }
    .bind(to: secondObserver)
    .disposed(by: disposeBag)

1 Ответ

0 голосов
/ 05 февраля 2019

Возможно, что-то вроде этого:

extension ObservableType {
    func bindCondition<T, U>(_ predicate: @escaping (E) throws -> Bool, ifTrue: T, ifFalse: U) -> Disposable where T: ObserverType, U: ObserverType, T.E == E, U.E == E {
        return Disposables.create([
            filter(predicate).bind(to: ifTrue),
            filter { try !predicate($0) }.bind(to: ifFalse)
        ])
    }
}
...