####為什麼是函式式
####函式式的實現 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,雖然也可以歸結...