Reputation: 4513
Let's say I have the following:
let theSubject = PublishSubject<String>()
let theObservable = Observable.just("Hello?")
How do I set the theSubject
to observer theObservable
?
In RxSwift we say that a subject is an observer and can subscribe to one or more Observables...
Can you show a simple code example of how I can connect theSubject
as an observer of theObservable
?
Upvotes: 10
Views: 8877
Reputation: 33967
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.
Upvotes: 15
Reputation: 14780
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 Driver
s)
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)
Upvotes: 9