鏈式編程和函數式編程,鏈式編程函數

來源:互聯網
上載者:User

鏈式編程和函數式編程,鏈式編程函數

說起鏈式編程和函數式編程,小夥伴們千萬不要緊張。

聽著很高大尚,其實也就那麼回事。相信有過C#開發經驗的,或者其他編程經驗的,只要不是OC,一看就知道。

看兩行代碼:

1     Person *person = [[Person alloc] init];2     person.run(9.2).eat(@"香蕉").run(1.2).eat(@"麵條");

上面的就是鏈式編程+函數式編程。

來個大白話解釋:看到括弧裡面的參數了吧,跟C的函數調用是不是很相似,包括別的語言,都用小括弧傳參,只有OC是冒號傳參。

再看方法調用用的是".",而OC用的是[]+空格。

這幾個方法調用,如果要按OC的打法,估計要整4行,對象一個一個的調用方法,但鏈式就是這麼一行搞定。

 

我們來分析一下,在OC中,什麼可以通過小括弧()來傳參呢,沒錯,那就是Block,調用Block的時候,blockName(para),就是這樣。

所以,我們推斷run(para)和eat(para)這兩個方法,肯定傳回值是一個Block,而且是帶一個參數的Block。

那麼通過 《點》 調用方法怎麼解釋呢? 點其實就是調用getter方法,所以run和eat方法沒有參數,只有一個傳回型別為Block的值。

而且,能一直點下去,說明什麼呢,說明Block也有傳回值啊,而且傳回值的類型就是當前對象的類型。

哈哈,這下明白了吧。

 

原理說明白了,我們上代碼吧:

Person類標頭檔:

 1 #import <Foundation/Foundation.h> 2  3 @interface Person : NSObject 4  5 // 函數的傳回值是一個Block,Block的傳回值是當前對象,Block有一個參數 6 - (Person *(^)(double distance))run; 7  8 // 函數的傳回值是一個Block,Block的傳回值是當前對象,Block有一個參數 9 - (Person *(^)(NSString *food))eat;10 11 @end

Person類的.m檔案:

 1 #import "Person.h" 2  3 @implementation Person 4  5 - (Person *(^)(double))run{ 6     // 方法的返回是一個”有參無傳回值的Block“ 7     return ^(double distance){ 8         NSLog(@"跑:%f",distance); 9         // block的傳回值是當前對象10         return self;11     };12 }13 14 - (Person *(^)(NSString *))eat{15     // 方法的返回是一個”有參無傳回值的Block“16     return ^(NSString *food){17         NSLog(@"吃:%@",food);18         // block的傳回值是當前對象19         return self;20     };21 }22 23 @end

看到了吧,一定要看這2行注釋,這可是整個的核心。

接下來,調用即可。

 1 #import "ViewController.h" 2 #import "Person.h" 3  4 @interface ViewController () 5  6 @end 7  8 @implementation ViewController 9 10 - (void)viewDidLoad {11     [super viewDidLoad];12     13     Person *person = [[Person alloc] init];14     15     // 這就是鏈式編程+函數式編程16     person.run(9.2).eat(@"香蕉").run(1.2).eat(@"麵條");17 }18 19 @end

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.