RxSwift 中慣用的 Observable Sequences

今天晚上出去和朋友吃飯,現在在從二子玉川坐車回家的路上,突然想到就寫一下唄。

開始在專案中使用 RxSwift 到目前為止已經一個月又多一點點(正式使用從 2017/4/10 開始算),這篇想要整理自己怎麼用 RxSwift 中的各種 Observable Sequences 型別。


目前歸納之後我慣用的有三個:

  • Observable
  • PublishSubject
  • Variable

這三個各有特性,接下來就說說我怎麼用她們。


Observable

主要拿來當作「單向」傳遞訊息的媒介。為了避免被誤打事件給他,所以使用基本上只能觀察到事件是否發生的型別。

以 Swift 本身的 pattern 的話,我對 Observerable 的用法,比較像是 Delegate Pattern ,把一個物件裡面處理過後的結果從裡面拋出來這樣的單向的訊息傳遞。


PublishSubject

這個就可以拿來做「雙向」溝通了。使用這個型別的 sequence 性質,是誰來打事件進去都沒關係的性質。

因為這個 sequence 的型別可以被轉換成 Observable ,所以常常被我拿來從物件內部打事件,接著再把事件透過 .asObservable() 後的 Observable 傳到物件外部。


Variable

這是個可以透過 .value 存取內含值的 sequence 型別,用處就像是一般的 property ,我習慣拿來放不需要倚賴事件流觸發才能取到,而是需要能夠不時都能方便的直接取得。


結語

以上,目前經過設計過後、通常只需要這三種型別配合使用就夠了,並也能夠順利地搭配寫出期望測試的案例。如果需要的時候,才會動用到 Driver 這個型別(但是通常是會用 asDriver() 去轉換,property 的型別還是用 Observable 會比較靈活)。

最重要的還是要去了解目前碰到流的型態以及要處理的資料的「性質」、想要給她什麼限制、想要給她怎麽被觀測、想要讓她怎麼被使用等等,才能夠比較容易找到自己要抓什麼武器來使用。

Show your support

Clapping shows how much you appreciated Li-Hsuan Chen’s story.