iOS 鏈式編程 關于masonry的實現(xiàn)

masonry git:https://github.com/SnapKit/Masonry


Masonry? 中的鏈 是如何實現(xiàn)的 ?

[myView mas_makeConstraiots:^(MASContraintMaker *make){

? ? make.top.left.equalTo(@20);

? ? make.bottom.right.equalTo(@-20);

}];

//鏈式編程 可以提供簡潔清晰,業(yè)務代碼更集中的接口,讓其他人使用起來更加方便,更加舒服,沒有拖沓的感覺


首先,4行代碼有很多知識點,一個一個分析

第一點,如何通過.(點)調用方法?

????iOS中使用點都是調用屬性的getter方法來獲取屬性值,如何調用普通的方法呢?

? ? 先了解一下getter方法是什么?

????????1.必須是對象方法;

????????2.必須有返回值,返回值的類型和成員變量的類型一致;

????????3.方法名必須是成員變量去掉下劃線; (無視它)

????????4.一定是沒有參數(shù)的.?

? ? ? 簡單來說,就是有返回值,沒有參數(shù)的方法,在iOS中就可以被點語法所調用

? ? ????舉個栗子:

????@implementation Person

? ? ? ? ? ?-(NSString *)getFirstName{

? ? ? ? ? ? ? return "Charlie";? ?

? ? ? ? }

? ? ? ? ? ?-(NSString *)getLastName{

? ? ? ? ? ? ? return "Chaplin";

? ? ? ? }

????@end

第二點,如何通過.(點) 連續(xù)調用方法?

? ? 了解完第一點后在了解這點 就會輕松很多,使用點調用方法,怎么實現(xiàn)連續(xù)調用呢?

? ? 使用make.top.left.? 舉個栗子:

? ? top 是誰在調用?left 又是誰在調用?

? ? 答案就是make在調用top,然后再調用left,咋回事呢??

????拆解一下:make.top, make.left? 。當 make.top 的返回值為make 的時候,就可以繼續(xù)使用點調用left

? ? ? ? 使用Person繼續(xù)舉栗:

? ??? ? ?-(Person *)getFirstName{

? ? ? ? ? ? ? ? return self;

? ? ? ? }

? ??? ? ?-(Person *)getLastName{

? ? ? ? ? ? ? ? return self;

? ? ? ? }

????這樣 就可以使用連續(xù)的點調用方法了?

????Person *p = [Person alloc]init];

? ? p.getFirstName.getLastName;


第三點,如何通過equalTo方法設置屬性?

? ??make.top.left.equalTo(@20);?

? ? .equalTo(@20); 這就是一個Block 的方法調用

? ? equalTo() 如何寫才能實現(xiàn)呢? 把一個block作為函數(shù)的返回值返回

? ??? ? ?-((^)(int))getAge{

? ? ? ? ? ? ? ? return ^(int age){

????????????????????self.age = age;

? ? ? ? ? ? ? ? };

? ? ? ? }

這樣寫就可以實現(xiàn)了Person.getAge(18);的寫法


第四點,結合2,3兩點實現(xiàn)函數(shù)鏈

? ? getSex的返回值為block,再把block執(zhí)行后的返回值設置為Person 就可以實現(xiàn)

? ??? ??? ? ?-(Person *(^)(NSString*))getSex{

? ? ? ? ? ? ? ? return ^(NSString* sex){

????????????????????self.sex = sex;

? ? ? ? ? ? ? ? ? ? return self;

? ? ? ? ? ? ? ? };

? ? ? ? ????}????

? ??p.getFirstName.getLastName.getSex(@"女").getAge(18);

第五點:make.top.left.equalTo(@20) 實現(xiàn)原理

? ??make需要生成一個素組用于保存需要配置的約束

? ? 當調用top方法時,就將top的約束配置加入到約束數(shù)組里,然后返回self 提供鏈編程方法

? ? 當調用left方法時,同top的方法調用

? ? 最后調用equalTo()方法時,遍歷約束數(shù)組,逐個配置約束數(shù)組里的約束

如何使用一個鏈式編程提供一個優(yōu)雅一些的接口:

????如果有一個Person類,平時的寫法是這樣的

????Person *p = [[Person alloc]init];

????p.firstName = "Charlie";

????p.lastName = "Chaplin";

????p.sex = "男"

????p.age = 20; .......

? ? p.job =?"演員";

????使用鏈可以把代碼簡潔為:

Person *p = [[Person alloc]init];

[p createPerson:^(Person *pCreater){

? ? pCreate.firstName("Charlie").lastName("Chaplin").sex("男").age(20).job("演員");

????//優(yōu)點:person 的業(yè)務代碼全部集中在了這個block里面,并且看起來簡潔清晰

}];


總結:在iOS中實現(xiàn)鏈式編程并不難,主要的想法就是返回self,通過self 再次調用getter類型方法,做什么事情就要用到block作為返回值,再把self作為block的返回值返回。如果想深入學習鏈式編程,翻翻Masonry的代碼吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • [置頂]iOS - Masonry使用中的一些整理 標簽:iOS資源大全iOS常用方法iOS學習資料Masonry...
    DreamMakerSky閱讀 3,269評論 0 4
  • 我們先來看看是如何開始使用Masonry的,一般我們使用這個布局框架的時候,都會調用以下代碼。。。。。 [self...
    smile小芳閱讀 1,278評論 0 0
  • (一)Masonry介紹 Masonry是一個輕量級的布局框架 擁有自己的描述語法 采用更優(yōu)雅的鏈式語法封裝自動布...
    木易林1閱讀 2,582評論 0 3
  • Masonry是一個輕量級的布局框架,擁有自己的描述語法,采用更優(yōu)雅的鏈式語法封裝自動布局,簡潔明了并具有高可讀性...
    3dcc6cf93bb5閱讀 1,936評論 0 1
  • 發(fā)展到現(xiàn)在已經(jīng)在全國遍地開花,很多人都看到這個行業(yè)的價值,所以都想進入這個行業(yè)但有很多細節(jié)是大多數(shù)人不知道的。維m...
    我來告訴你閱讀 587評論 0 0

友情鏈接更多精彩內容