In RxSwift how can I set up a Subject to observe another Observable?

The code is:

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

or:

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

If you only do subscribe(onNext:) as others have suggested, only the onNext events will get passed along. You should use bind to pass everything along.

(But really you probably shouldn't use a subject. Instead bind the thing(s) that are listening to the subject to the Observable directly.


The answer is

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

This will make sure that every time that the theObservable emits, the value will be passed to theSubject too.

Note This only passes the value onNext, if you want to handle all the cases, then use bind(to:) as the answer by Daniel T. (or drive for Drivers)

Example with more Observables

In the following example values from different Observables will be passed to 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)

Output

The subject