在RxSwift中,如何设置一个主题以观察另一个Observable?

And*_*ons 5 ios swift rx-swift

假设我有以下几点:

let theSubject = PublishSubject<String>()
let theObservable = Observable.just("Hello?")
Run Code Online (Sandbox Code Playgroud)

如何设置theSubject观察者theObservable?

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

您能否显示一个简单的代码示例来说明如何theSubject以观察者身份进行连接theObservable?

Dan*_* T. 12

代码是:

theObservable
    .bind(to: theSubject)
    .disposed(by: bag)
Run Code Online (Sandbox Code Playgroud)

或者:

theObservable 
    .subscribe(theSubject)
    .disposed(by: bag)
Run Code Online (Sandbox Code Playgroud)

如果您只subscribe(onNext:)按照其他人的建议进行操作,则只会传递 onNext 事件。您应该使用 bind 来传递所有内容。

(但实际上您可能不应该使用主题。而是将正在侦听主题的事物直接绑定到 Observable。


E-R*_*die 8

答案是

theObservable
    .subscribe(onNext: { theSubject.onNext($0) })
    .disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)

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

注意 这仅传递 value onNext,如果您想处理所有情况,请bind(to:)用作Daniel T. (or for s)的答案driveDriver

具有更多 Observable 的示例

在下面的示例中,不同的值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)
Run Code Online (Sandbox Code Playgroud)

输出

主题