如何利用 RxSwift 監聽多個事件?

假設我們有許多事件,你想要其中一個 Observables 事件觸發就通知前端,那麼可以利用 RxSwift 內建的 merge 功能,利用 merge 可以一次聽許多事件,讓你寫起程式來更精簡唷!

swift 1

假設你有一段程式碼如下, 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
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments