深入淺出-iOS函數式編程的實現 && 響應式編程概念

來源:互聯網
上載者:User

標籤:鏈式   ges   insets   ons   fse   lock   學習   第三方   isp   

簡介

本篇主要回顧一下--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");                          return self;                };              return block;} - (Person* (^)())studyBlock {       Person* (^block)() = ^()  {                          NSLog(@"study");               return self;               };        return block;}

再來看一下Masonry的一個函數式編程

make.right.equalTo(self.right).insets(kPadding);

最終調用的函數:
返回的就是一個傳回值為MASConstraint的block

- (MASConstraint* (^)(id))equalTo {    return ^id(idattribute) {                     return self.equalToWithRelation(attribute,NSLayoutRelationEqual);    };}
函數式編程總結
  • 如果想再去調用別的方法,那麼就需要返回一個對象;
  • 如果想用()去執行,那麼需要返回一個block;
  • 如果想讓返回的block再調用對象的方法,那麼這個block就需要返回一個對象(即傳回值為一個對象的block)。
響應式編程的概念

在網上流傳一個非常經典的解釋`響應式編程的概念`
在程式開發中:
a = b + c
賦值之後 b 或者 c 的值變化後,a 的值不會跟著變化
響應式編程,目標就是,如果 b 或者 c 的數值發生變化,a 的數值會同時發生變化;

 



文/iOS音視頻(簡書作者)
原文連結:http://www.jianshu.com/p/7017a220f34c
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。

深入淺出-iOS函數式編程的實現 && 響應式編程概念

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.