有没有办法将 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)
])
}
}
所以我想知道在使用 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)
])
}
}