iOS 鏈式編程 關(guān)于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è)務(wù)代碼更集中的接口劝枣,讓其他人使用起來更加方便织鲸,更加舒服舔腾,沒有拖沓的感覺


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

第一點瀑踢,如何通過.(點)調(diào)用方法扳还?

????iOS中使用點都是調(diào)用屬性的getter方法來獲取屬性值,如何調(diào)用普通的方法呢氨距?

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

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

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

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

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

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

? ? ????舉個栗子:

????@implementation Person

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

? ? ? ? ? ? ? return "Charlie"寡喝;? ?

? ? ? ? }

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

? ? ? ? ? ? ? return "Chaplin"勒奇;

? ? ? ? }

????@end

第二點预鬓,如何通過.(點) 連續(xù)調(diào)用方法撬陵?

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

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

? ? top 是誰在調(diào)用草添?left 又是誰在調(diào)用?

? ? 答案就是make在調(diào)用top远寸,然后再調(diào)用left抄淑,咋回事呢驰后??

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

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

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

? ? ? ? ? ? ? ? return self;

? ? ? ? }

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

? ? ? ? ? ? ? ? return self;

? ? ? ? }

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

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

? ? p.getFirstName.getLastName;


第三點郑原,如何通過equalTo方法設(shè)置屬性夜涕?

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

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

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

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

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

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

? ? ? ? ? ? ? ? };

? ? ? ? }

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


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

? ? getSex的返回值為block,再把block執(zhí)行后的返回值設(shè)置為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需要生成一個素組用于保存需要配置的約束

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

? ? 當調(diào)用left方法時,同top的方法調(diào)用

? ? 最后調(diào)用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è)務(wù)代碼全部集中在了這個block里面,并且看起來簡潔清晰

}];


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗜湃,一起剝皮案震驚了整個濱河市奈应,隨后出現(xiàn)的幾起案子购披,更是在濱河造成了極大的恐慌杖挣,老刑警劉巖刚陡,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異橘荠,居然都是意外死亡屿附,警方通過查閱死者的電腦和手機哥童,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門挺份,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匀泊,“玉大人优训,你說我怎么就攤上這事各聘〈Х牵” “怎么了躲因?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長大脉。 經(jīng)常有香客問我苍姜,道長,這世上最難降的妖魔是什么怖现? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮屈嗤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饶号。我一直安慰自己铁追,他們只是感情好茫船,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著算谈,像睡著了一般涩禀。 火紅的嫁衣襯著肌膚如雪然眼。 梳的紋絲不亂的頭發(fā)上艾船,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音屿岂,去河邊找鬼。 笑死爷怀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的运授。 我是一名探鬼主播烤惊,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吁朦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喇完?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤锦溪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刻诊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡则涯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粟判。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡档礁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吝沫,到底是詐尸還是另有隱情,我是刑警寧澤惨险,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站辫愉,受9級特大地震影響栅受,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窘疮,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闸衫。 院中可真熱鬧,春花似錦蔚出、人聲如沸弟翘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趋翻。三九已至睛琳,卻和暖如春踏烙,著一層夾襖步出監(jiān)牢的瞬間师骗,已是汗流浹背讨惩。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工辟癌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荐捻,地道東北人黍少。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓处面,卻偏偏與公主長得像厂置,于是被迫代替她去往敵國和親鸳君。 傳聞我的和親對象是個殘疾皇子农渊,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

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