RAC的函式式程式設計

2021-08-09 19:23:14 字數 2905 閱讀 7267

####為什麼是函式式

####函式式的實現 objc語言使用block實現函式式程式設計,在典型的函式式程式設計框架rac中,把資料的生成和資料的處理單獨的放在block中處理,資料的生產和消費之間是松耦合的,block是資料處理的最小單位。

pod 'reactiveobjc', '3.0.0'
####建立racsignal以及訂閱這個racsignal接收訊息

簡單的**如下

racsignal* signal = [racsignal createsignal:^racdisposable * _nullable(id_nonnull subscriber) ];

[signal subscribenext:^(id _nullable x) ];

// 控制台輸出

2017-04-24 17:36:49.364 effectiveocdemo[46385:2426010] received:message

####racsignal物件建立

// racsignal.m

+ (racsignal *)createsignal:(racdisposable * (^)(idsubscriber))didsubscribe

// racdynamicsignal.m

+ (racsignal *)createsignal:(racdisposable * (^)(idsubscriber))didsubscribe

使用racsignal類的類方法createsignal建立乙個racsignal最終建立的是乙個racsignal的子類racdynamicsignal的物件,物件中會把引數中的didsubscribe block 儲存到_didsubscribe例項變數中,後面傳送訊息的時候回用到_didsubscribe這個block。

####subscribenext 方法

// racsignal.m

- (racdisposable *)subscribenext:(void (^)(id x))nextblock

// racsubscriber.m 快捷方法建立racsubscriber物件

+ (instancetype)subscriberwithnext:(void (^)(id x))next error:(void (^)(nserror *error))error completed:(void (^)(void))completed

// racdynamicsignal.m

- (racdisposable *)subscribe:(id)subscriber ];

[disposable adddisposable:schedulingdisposable]; }

return disposable;

}

racsignal的subscribenext方法中會建立了乙個sub,_next成員變數用於儲存引數中的nextblock,後面接收訊息的時候會用到_next block。建立了racsubscriber物件之後,呼叫racdynamicsignal物件的的subscribe方法,並且把racsubscriber物件當做引數進行傳遞。然後執行之前儲存的didsubscribe block

self.didsubscribe(subscriber);
也就是執行了下面這個block,在這個block中又會執行racsubscriber的sendnext方法

racsignal* signal = [racsignal createsignal:^racdisposable * _nullable(id_nonnull subscriber) ];
####sendnext方法

- (void)sendnext:(id)value 

}

sendnext方法會同步取出之前儲存的next block,然後執行該block,並且傳遞sendnext方法中的引數,執行nextblock也就是執行了下面這個block

[signal subscribenext:^(id  _nullable x) ];
這樣乙個完整的訊息傳送接收鏈就建立起來了,在racsignal createsignal block中傳送的資料在signal subscribenext block中可以同步的接收到。

####小結 #####冷訊號和熱訊號

racsignal* signal = [racsignal createsignal:^racdisposable * _nullable(id_nonnull subscriber) ];
建立的racsignal物件裡面的_didsubscribe並不會自動執行,這種racsignal成為_冷訊號,當且僅當呼叫了subscribenext訂閱這個訊號,racsignal物件 的_didsubscribe才會得到執行,這樣racsignal成為了熱訊號_,在_didsubscribe block執行的時候同時會呼叫racsubscriber sendnext方法,sendnext又會呼叫racsubscriber的nextblock,這樣訊息**完畢。

#####racsignal資料流圖

RAC響應式程式設計

2 現在自定義乙個view,view裡面有個button,外面引用的時候執行button方法通常 或者block,現在用ra c實現,如下 新建乙個customview,繼承於view custom.h import import inte ce customview uiview property...

函式式程式設計中的函式 函式式程式設計的多型

函式式程式設計中的函式 函式式程式設計的多型 儲存了計算上下文和計算過程的特殊值 儲存了計算上下文和計算過程的有輸入輸出的可計算結構。儲存了計算上下文和計算過程的可配置結構 柯里化 函式作為一種特殊的值和結構,可以由更高階的函式對其進行組合 變換 柯里化等操作 函式作為輸入和輸出 本質上都是可配置 ...

函式式程式語言python 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...