亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

響應式編程應用場景 ios響應式編程優(yōu)缺點


響應式編程應用場景 ios響應式編程優(yōu)缺點

文章插圖
本文將介紹一個響應式編程架構(gòu) RxSwift , 并結(jié)合使用 Swift 的函數(shù)式功能來編寫更簡潔、更表現(xiàn)力的代碼 , 從而管理應用狀態(tài)及并行任務(wù) 。
Swift 及其函數(shù)式功能
Swift 可被認為是一種現(xiàn)代的面向?qū)ο笳Z言 , 對泛型編程有著原生支持 。雖然它不是一種函數(shù)式語言 , 但其中的一些特性卻可以讓我們利用函數(shù)式方式來編程 , 比如可以利用閉包、first-class 類型函數(shù) , 以及不可變的value 類型 。
然而 , Cocoa Touch 是一個面向?qū)ο蟮募軜?gòu) , 有著這一范式所強制的約束 。軟件開發(fā)中常見的問題在于如何管理共享應用狀態(tài)以及異步數(shù)據(jù)的并行任務(wù) 。
函數(shù)式編程解決這些問題的辦法是 , 賦予不可變狀態(tài)一定的特權(quán) , 以及將應用邏輯定義為不會在應用生存周期內(nèi)改變的表達式 。通過定義自包含的函數(shù) , 并行化計算就會變得簡單 , 最大程度減少并發(fā)問題 。
響應式模型
響應式編程根源于 FRP(函數(shù)響應式編程)命令驅(qū)動的編程方式 , 是以異步數(shù)據(jù)流的形式進行編程 。
這可能有些難懂 , 所以最好通過一個簡單的例子來大體了解一下 。
表達一個變量間關(guān)系
假如有 2 個變量(A 和 B) , 它們的值會在應用運行時中經(jīng)常改變 。還有一個變量(C) , 它的值取決于前兩個變量值 。
2. var B = 20
3. let C = A * 2 + B
4.
5. // 當前值
6. // A = 10, B = 20, C = 40
7.
8. A = 0
9.
10. // 當前值
11. // A = 0, B = 20, C = 40
C 值與 A 和 B 有關(guān) , B 只被當 A 和 B 的賦值操作執(zhí)行后 , 它們?nèi)咧g的關(guān)系很快就解散了 。這時再改變 A 與 B 的值 , 將不會對 C 的值有任何影響 。
所以 , 在任何指定時間 , 要想計算表達式 , 就必須根據(jù) A 和 B 的當前值 , 重新指定 C 值 , 重新計算 。
用響應式編程方式該怎么做呢?
采用響應式模式 , 我們將創(chuàng)建兩個流 , 來傳遞 A 或 B 值的改變 。
一般可使用彈珠圖來展示這個原理 。如下圖所示 , 每一行表示連續(xù)的一段時間 , 每一個彈珠表示發(fā)生在特定時刻的一個事件 。
Cocoa Touch 中的做法
在 Cocoa Touch 中 , 使用鍵值對觀察 , 為發(fā)生改變的變量添加觀察者 , 當 KVO 系統(tǒng)通知時再進行處理 。
self.addObserver(self, forKeyPath:”valueA”, options: .New, context: nil)
self.addObserver(self, forKeyPath:”valueB”, options: .New, context: nil)
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
let C = valueA * 2 + valueB
}
如果變量與用戶界面相連 , 那么可以在 UIKit 中定義一個當觸發(fā)變化事件時即被調(diào)用的處理器:
sliderA.addTarget(self, action: “update”, forControlEvents: UIControlEvents.ValueChanged)
sliderB.addTarget(self, action: “update”, forControlEvents: UIControlEvents.ValueChanged)
func update() {
let C = sliderA.value * 2 + sliderB.value
}
但是 , 對于調(diào)用的變量、它們的生存周期以及改變它們值的事件 , 以上兩種方法都沒有定義一種持久、顯式的關(guān)系 。
我們可以用響應式編程模式來處理這種情況 。當前對于 OS X 和 iOS 開發(fā)者而言 , 有多種不同的實現(xiàn) , 比如 RxSwift 和 ReactiveCocoa 。


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助: