国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 什么是響應式編程,Combine, RxJS, RxSwift背后的理論基礎?

什么是響應式編程,Combine, RxJS, RxSwift背后的理論基礎?

來源:千鋒教育
發布人:xqq
時間: 2023-10-11 20:13:41 1697026421

一、響應式編程

響應式編程使用三個核心概念:數據流,函數式編程和異步觀察。

數據流 Data Streams:比如一個 Timer 每隔 1 秒發布一個數,這個數依次遞增 。那么這個 Timer 就可以是一個發布者 Publisher。它發布的內容就會形成一個數據流。好像這樣:1 – 2 – 3 – 4 – …..函數式編程 Functional Programming:有了這個數據流你需要一個一個數據的處理吧,這是你你不是把它當成一個 Array 來處理,因為數據是一個一個來的,你不知道它的終點在哪。因此你自己制定一些標準來篩選想要的。比如你想篩選偶數來做下一步處理,就用 .filter { return value % 2 == 0 }。這么一操作就把偶數留下來了,其余的數據全部不用。而這個處理數據的思路就是函數式編程的思想。異步觀察 Asynchronous Observers:這些處理好的數據給誰聽呢?這里正是 Subscriber 來聽。比如你想沒兩秒更改一次 UI 上面的圖標,顯示遞增的偶數。那么就會訂閱上面那個 Publisher,然后把它處理出來的數據更新到 UI 的 Label 上面。

區分一下指令時編程和函數式編程。指令式編程就是我們熟悉的 if else 一步一步來。而函數式編程則是把功能提出來,不和數據本身的類型掛鉤。比如 Filter 函數,就是篩選滿足某種條件的數據。而響應式編程是什么呢?其實是對數據的處理,處理后發送給訂閱者。

因此你也可以理解成響應式編程是對數據做出反饋,而這里判斷數據的時候就用到了函數式編程的思想。為什么響應式編程使用了函數式編程的核心思想呢?主要是因為函數式編程是 Stateless 的,因此不會有副作用。而響應式編程想處理的就是數據流,所以也有人把響應式編程叫做數據流編程。

「響應式」這三個字描述的是我們的對數據流的處理方式,對數據變化作出響應。「函數式」指的是處理數據的編程方法,描述你想保留刪選或者如何變更數據。「函數式」是「描述式」編程的一種體現。

這里我覺得蘋果 Combine 響應式框架的解釋很好,放在這里你感受一下。

The Combine framework provides a declarative Swift API for processing values over time. These values can represent many kinds of asynchronous events. Combine declares?publishers?to expose values that can change over time, and?subscribers?to receive those values from the publishers.

我大概翻譯一下:Combine 框架提供了描述式 API 用以處理數據流。這些數據可以代表多種異步事件。Combine 框架使用 Publisher 來講數據變更呈現出來;Subscriber 負責從發布者那里接受數據。

Combine 框架和 RxJava, RxJS, RxSwift 等一些列響應式框架和原理是一樣的,因此你可以遠離互通。下面的這些函數就是 Combine 框架 Publisher 函數的一些范例,你也可以把這些處理數據的函數叫做「函數式編程」。

延伸閱讀:

二、同步與異步

分布式網絡系統中,各個參與方節點的運行是相互獨立的,沒有共享內存,沒有全局時鐘。各節點通過消息來進行溝通。在傳統的理念中,我們會把這樣的網絡根據他們通信方式描述成同步和異步的。

同步(Synchronous)就是整個處理過程順序執行,當各個過程都執行完畢,并返回結果。是一種線性執行的方式,執行的流程不能跨越。一般用于流程性比較強的程序,比如用戶登錄,需要對用戶驗證完成后才能登錄系統。異步(Asynchronous)則是只是發送了調用的指令,調用者無需等待被調用的方法完全執行完畢;而是繼續執行下面的流程。是一種并行處理的方式,不必等待一個程序執行完,可以執行其它的任務,比如頁面數據加載過程,不需要等所有數據獲取后再顯示頁面。
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT