假設我們有許多事件,你想要其中一個 Observables 事件觸發就通知前端,那麼可以利用 RxSwift 內建的 merge 功能,利用 merge 可以一次聽許多事件,讓你寫起程式來更精簡唷!
假設你有一段程式碼如下, subject 1 和 subject 2 發出通知都要印出來,那麼可以先用「 Observable.of」將事件串連起來,再利用 merge 來組合,程式碼會寫成這樣。
let disposeBag = DisposeBag()
let subject1 = PublishSubject<String>()
let subject2 = PublishSubject<String>()
Observable.of(subject1, subject2)
.merge()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
接下來,你發出了一連串的通知
subject1.onNext("Hello")
subject1.onNext("World")
subject2.onNext("Hi")
subject2.onNext("How Are You")
subject1.onNext("I Love You")
subject2.onNext("You Love Me")
由於任何一個 Observables 收到事件後都會觸發通知,所以輸出的結果會是這樣!
Hello
World
Hi
How Are You
I Love You
You Love Me
但是,如果你的監聽型別不一樣,以下列程式碼為例,因為 String 和 Bool 是不同型別,所以無法使用 merge 來監聽唷。
let disposeBag = DisposeBag()
let subject1 = PublishSubject<String>()
let subject2 = PublishSubject<Bool>()
Observable.of(subject1, subject2)
.merge()
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
/// Error