iOS RxSwift Basic Usage

栏目: Swift · 发布时间: 6年前

内容简介:以 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
    }

← 建立 Proxy Server ( 使用 AWS EC2 與 Squid )


以上所述就是小编给大家介绍的《iOS RxSwift Basic Usage》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

转型之战

转型之战

吴晓波 / 2015-7-1

互联网时代大潮席卷而来,互联网究竟是“魔法手杖”,还是“效率金箍棒”?传统企业如何正确借助和利用互联网思维帮助自身转变思维、完成企业转型升级?本书分两篇,上篇为传统行业互联网转型极具代表性和借鉴意义的案例,下篇精选吴晓波转型大课的独 家内容,梳理了吴晓波、刘伟、刘润、金霞、刘博、赵峰、张蕴蓝、张荣耀、李嘉聪、曾玉波等各行业10位导师关于互联网思维的精华理念和观点,其中囊括各传统行业互联网转型成功的......一起来看看 《转型之战》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具