内容简介:以 function 為單位,一個 function 的 input 可以是一個 function 或是 value,而 function 的 output 也可以是一個 function 或是 value 而作為下一個 function 的 input,這樣透過一連串的計算函式設計來得到結果,並且限制無法使用變數或是狀態來避免造成 side effect。
Functional programming
以 function 為單位,一個 function 的 input 可以是一個 function 或是 value,
而 function 的 output 也可以是一個 function 或是 value 而作為下一個 function 的 input,
這樣透過一連串的計算函式設計來得到結果,並且限制無法使用變數或是狀態來避免造成 side effect。
Reactive programming
以 data streams / data flow 為概念作為設計,
reactive programming 將所有的東西當作 data,包含 click event 或 http request 等等,
並且透過 functional programming 的設計將所有 data 串為一個 stream,
且這些 data 可透過 asynchronize 產生,
因此可以理解成,當一個 data,如 click event 執行相對應的 function,
這個 function 會產生下一個 function 的 input,下一個 data,如 pop alert 執行相對應的 function,
就會是下一個 function。
RxSwift
RxSwift - 與 Swift 溝通的 framework
RxCocoa - 透過 reactive 的方式來使用 Cocoa API 的 framework
Observable - 發出改變的被觀察對象
Observer - 監聽 observable 的觀察者
Disposable - 管理觀察者的記憶體
建立 Observable
Observable 可透過事件發出改變值或特定信號給觀察者,事件有 onNext, onError 與 onCompleted。
若發出 onCompleted 或 onError 事件,會使得整個 stream 終止並解除觀察者的監聽。
let observableSample: Observable<Int> = Observable.create { (observer) -> Disposable in
observer.onNext(1)
return Disposables.create()
}
建立 Observer
建立方法有兩種。
1 初始化 observer
let observerSampleA: AnyObserver<Int> = AnyObserver { (event) in
}
observableSample.subscribe(observerSampleA)
2 使用 closure
observableSample.subscribe { (event) in
}
Observable type
RxSwift 提供不同類型的 observable 可以直接呼叫使用。
- Single
> 只能發出一個改變值 "或" 一個 error
- Completable
> 不發出任何改變值,只能發出一個 completed "或" 一個 error
- Maybe
> 只能發出一個改變值 "或" 發出一個 completed "或" 一個 error
-
Driver
Driver 保證不會產生 error,且會在 main thread 執行加上改變的狀態共享。
這種類型的 observable 可以安全的與 UI 事件做結合,
確保執行到 UI 相關的 function 時會在 main thread 執行且不會因為產生 error 而解除觀察。
let observableSample: Observable<String> = Observable.create { (observer) -> Disposable in return Disposables.create() } let driver = observableSample.asDriver(onErrorJustReturn: "error") driver.drive(label.rx.text)
Observer type
-
Binder
除了前面提到的 AnyObserver 外,Binder 用來特別處理 UI 事件,
不會處理 error 也可以在特定的 thread 上執行,default 為 main thread。
let observer: Binder<String> = Binder(label) { (view, text) in view.text = text }
以上所述就是小编给大家介绍的《iOS RxSwift Basic Usage》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Uberland
Alex Rosenblat / University of California Press / 2018-11-19 / GBP 21.00
Silicon Valley technology is transforming the way we work, and Uber is leading the charge. An American startup that promised to deliver entrepreneurship for the masses through its technology, Uber ins......一起来看看 《Uberland》 这本书的介绍吧!