傳說中的RxSwift#5[Observer觀察者]

講完了觀察序列,當然要聊一下觀察者

前言

在介紹了多種的觀察序列後,接下來要介紹所謂的觀察者,觀察者這個概念可以是一個動作或一個行為,比如說「如果火災,手機就跳出訊息:火災啦!」那麼手機跳出訊息的這個因果關係的結果,其實就是一個觀察者。

在根本對於觀察序列與觀察者之間的關係,最直觀的就是「響應事件」,只要響應事件的就是觀察者,具有直觀的因果關係。

那麼,要如何的創建一個觀察者呢?下面為創建的方式進行了一些說明與分類:AnyObserver、Binder

如果單純用Button按下去之後響應事件,應該就跟下面這個程式碼的範例一樣:

實際Run的結果:

你應該就會看到了一個很基本的響應事件:「按下按鈕之後,出現提示框」。

AnyObserver

那這邊有一個叫做AnyObserver的觀察者,人如其名,就代表它可以是任意一種的觀察者,那在下面程式碼的例子就是,用一個SwitchButton去決定一個Label是否顯示在畫面上:

實際Run起來如下:

Binder

特性大概有二:

  1. 不處理錯誤事件
  2. 綁定都是在Scheduler上(默認MainScheduler)

如果出現錯誤,就直接跳fatalError,consoleLog等著看錯誤訊息。

Binder的特色是在主線程上執行,所以,在處理UI的時候,一個比較好的方式就是使用Binder,當然AnyObserver也是可以,但Binder這時候具有選擇的優勢,那我們實際來看一個UI的例子:

上面的方式就是綁定UI

實際上run的結果,也會跟上面的AnyObserver綁定一樣。

但是,我們其實也可以不用每次需要綁定一個UI就做一個觀察者,你可以直接的使用extension去幫你做這件事情,以避免重複的程式碼,這樣就可以避免很多重複寫程式碼的時間了:

不過⋯⋯或許還不熟悉RxSwift在創建觀察者的用法,可能還是在多練習,看看其他的人怎麼去使用這些東西,或許對於綁定UI的做法就可以更熟悉了!

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

影山小麥機
影山小麥機

Written by 影山小麥機

本職為Mobile工程師,熱愛分享視野,也樂意站在ChatGPT的肩膀上。訂閱小麥機,收割技術、職涯、人生的難題。

No responses yet

Write a response