在RxSwift中,我如何设置一个Subject来观察另一个Observable?

问题描述 投票:4回答:2

假设我有以下内容:

let theSubject = PublishSubject<String>()
let theObservable = Observable.just("Hello?")

如何将theSubject设置为观察者theObservable

在RxSwift中,我们说主题是一个观察者,可以订阅一个或多个Observables ......

你能展示一个简单的代码示例,说明如何将theSubject作为theObservable的观察者连接起来吗?

ios swift rx-swift
2个回答
2
投票

答案是

theObservable
    .subscribe(onNext: { theSubject.onNext($0) })
    .disposed(by: disposeBag)

这将确保每次theObservable发出时,该值也将传递给theSubject

注意这只传递值onNext,如果你想处理所有的情况,那么使用bind(to:)作为Daniel T.的answer(或者drive用于Drivers)

更多Observables的示例

在下面的示例中,来自不同Observables的值将传递给theSubject

let theSubject = PublishSubject<String>()
let theObservable = Observable.just("Hello?")
let anotherObservable = Observable.just("Hey there")

theSubject.asObservable()
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

theObservable
    .subscribe(onNext: { theSubject.onNext($0) })
    .disposed(by: disposeBag)

anotherObservable
    .subscribe(onNext: { theSubject.onNext($0) })
    .disposed(by: disposeBag)

产量

The subject


4
投票

代码是:

theObservable
    .bind(to: theSubject)
    .disposed(by: bag)

要么:

theObservable 
    .subscribe(theSubject)
    .disposed(by: bag)

如果您只像其他人建议的那样执行subscribe(onNext:),则只会传递onNext事件。您应该使用bind来传递所有内容。

(但实际上你可能不应该使用一个主题。而是直接将正在听主题的东西绑定到Observable。

© www.soinside.com 2019 - 2024. All rights reserved.