有没有办法将 Observable.bind 和折叠之类的东西结合起来?

Is there a way to convine Observable.bind and something like fold?

所以我想知道在使用 RxSwift 编写 viewModel 时是否有一种方法可以结合 bind 和 fold 所以你可以像这样签名

someObservable.bind(someCondition, firstObserver,secondObserver)

它将被替换为

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

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

也许是这样的:

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([=10=]) }.bind(to: ifFalse)
        ])
    }
}