簡介
本篇主要回顧一下--ios函式式程式設計 && 響應式程式設計概念 ,如何一步步實現函式式程式設計的過程,對閱讀masonry && snapkit原始碼有一定的幫助。
作為乙個ios 開發者,那麼你一定用過masnory/ snapkit;
masonry是乙個oc開發中,非常好用的自動布局的第三方框架;
snapkit是masonry團隊打造的swift版本的自動布局框架;如果你沒有用過,在自動布局中用的是蘋果原生的或者原生的公升級版vfl語言,那我只好為你點「贊」!
乙個典型的masonry的語句:
make.centery.equalto(self.view).offset(100);
就是這個「.」讓masonry更加鮮活的展示給了開發者,在我心中masnory/ snapkit函式式程式設計的乙個經典的代表作,非常值得參考和學習!
鏈式程式設計的好處不用再說了,用過masnory/ snapkit的都知道;
那麼問題來了,怎麼寫鏈式程式設計呢?
一步步來實現乙個函式式程式設計
1.新建專案command +shift + n
2.建立乙個person類 並為其增加兩個方法
- (void)run;
- (void)study;
簡單實現:
- (void)run{
nslog(@"run");
- (void)study {
nslog(@"study")
3.例項化並呼叫相關的方法
person*person = [[personalloc]init];
[personrun];
[personstudy];
以上三步實現了乙個非常簡單的程式;
最終目標
person.runblock().studyblock().runblock();
person.studyblock().studyblock().runblock();
分解目標
1.先實現這種方式呼叫
[[person run1] study1];
2.再實現最終目標
顯然,如果想要實現[person run1]呼叫乙個方法,那麼run1就需要乙個返回乙個物件,讓這個物件去呼叫study1。 這樣分析後,就簡單了,就是增加乙個返回值。
**方法的宣告
-(person*)run1;
-(person*)study1;
方法的實現
- (person*)run1 {
nslog(@"run");
return[[personalloc] init];
- (person*)study1{
nslog(@"study");
return[[personalloc]init];
實現最終目標:
person.runblock().studyblock().runblock();
在oc中,`()`block是以()的形式去執行的,猜想如果返回乙個block的話,那麼我就可以用()來實現runblock()這種效果了吧! 再結合我們的分解步驟,runblock()代表執行了乙個block,如果這個block的返回值的是乙個物件的話,那麼呼叫另外乙個方法;這樣就可以一直鏈結下去吧!實現了我們想要的目標!
**: 宣告
- (person* (^)())runblock;
- (person* (^)())studyblock;
實現:- (person* (^)())runblock {
person* (^block)() = ^() {
nslog(@"run");
returnself;
returnblock;
- (person* (^)())studyblock {
person* (^block)() = ^() {
nslog(@"study");
returnself;
returnblock;
再來看一下masonry的乙個函式式程式設計
make.right.equalto(self.right).insets(kpadding);
最終呼叫的函式:返回的就是乙個返回值為masconstraint的block
- (masconstraint* (^)(id))equalto {
return^id(idattribute) {
returnself.equaltowithrelation(attribute,nslayoutrelationequal);
函式式程式設計總結
如果想再去呼叫別的方法,那麼就需要返回乙個物件;
如果想用()去執行,那麼需要返回乙個block;
如果想讓返回的block再呼叫物件的方法,那麼這個block就需要返回乙個物件(即返回值為乙個物件的block)。
ios 函式式程式設計與響應式程式設計
ios函式式程式設計 響應式程式設計概念 如果想再去呼叫別的方法,那麼就需要返回乙個物件 如果想用 去執行,那麼需要返回乙個block 如果想讓返回的block再呼叫物件的方法,那麼這個block就需要返回乙個物件 即返回值為乙個物件的block 在網上流傳乙個非常經典的解釋 響應式程式設計的概念 ...
ios 鏈式程式設計 函式式程式設計以及響應式程式設計
我們如果在完成一件事情的時候,可能會需要有很多步驟,那我們其實就可以把這個步驟看成是乙個乙個的過程,然後再去組合起來,這樣會比較的清晰。就比如說學生要吃飯,讀書,跑步我們如果直接去呼叫方法的話是直接如以下步驟所示去呼叫的,這就是去實現吃飯,學習,跑步。這裡需要注意的是無引數的方法也是可以通過點的形式...
函式式程式設計和響應式程式設計
在程式開發中,a b c 賦值之後,b或者c的值變化後,a的值不會跟著變化。響應式程式設計目標就是,如果b或者c的數值發生變化,a的數值會同時發生變化。函式式程式設計是一系列被不公平對待的程式設計思想的保護傘,它的核心思想是,它是一種將程式看成是數學方法的求值 不會改變狀態 不會產生 後面我們馬上會...