鏈?zhǔn)骄幊?通過.將多行代碼合成一行

鏈?zhǔn)骄幊趟枷耄菏菍⒍鄠€(gè)操作(多行代碼)通過點(diǎn)號(hào)(.)鏈接在一起成為一句代碼,使代碼可讀性好寄纵。a(1).b(2).c(3)

鏈?zhǔn)骄幊烫攸c(diǎn):方法的返回值是block,block必須有返回值(本身對(duì)象),block參數(shù)(需要操作的值)

代表:masonry框架。

例子:模仿masonry,寫一個(gè)加法計(jì)算器,練習(xí)鏈?zhǔn)骄幊趟枷搿?/p>

  • 首先我們來了解一下masonry
UIView * redView =[[UIView alloc] init];
   UIView * redView =[[UIView alloc] init];
    redView.backgroundColor=[UIColor redColor];
    [self.view addSubview:redView];
    
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        //把所有的需要設(shè)置的內(nèi)容在這里 使其框架高聚合
        //這個(gè)make.top.left.bottom.right.equalTo就是一個(gè)block 通過block()來調(diào)用
        make.top.left.bottom.right.equalTo(@10);
    }];

  1. 首先我們來 試著寫出 這樣的形式的計(jì)算起來 make.top.left.bottom.right.equalTo(@10)

  2. 首先我們先創(chuàng)建一個(gè)計(jì)算器的管理器類 寫一個(gè)方法 就以加法 為例

    • 其余的方法同理
 .h文件 
@property (nonatomic, assign)  int result;
- (CaculatorMaker *(^)(int num))add;


.m文件實(shí)現(xiàn)
-( CaculatorMaker *(^)(int number))add{
  return ^(int number){
       self.result+= number;
       return self;
  };
}
外部的調(diào)用:
  CaculatorMaker *maker = [[CaculatorMaker alloc] init];
  int result = [maker.add(10).add(20).add(30).add(40) result];
  

Block返回值和鏈?zhǔn)骄幊淘淼闹v解

因?yàn)?add(10)之后 還要使用.add(20) 所以不能返回int 一定要返回 CaculatorMaker 類型這樣才能一直點(diǎn)下去

CaculatorMaker *(^)(int number) 這個(gè)返回值是一個(gè) 返回值 CaculatorMaker 參數(shù)是:int 類型

而且 剛好返回的是 相當(dāng)于 這個(gè)返回值 和返回的代碼塊就是一個(gè)block的定義~~

所以外部調(diào)用的時(shí)候 add 相當(dāng)于block 要想調(diào)用就直接 block(需要傳遞的參數(shù))
CaculatorMaker *(^)(int number) = ^(int number){
self.result+= number;
return self;
};

** 但是現(xiàn)在還是有個(gè)問題 **

  • 沒有高聚合 沒有把需要計(jì)算的代碼放在一塊
  • 而且每次每次都要使用創(chuàng)建一個(gè)類來計(jì)算 所以我們來創(chuàng)建一個(gè)分類方所有的類都可以計(jì)算
分類中
#import "NSObject+Caculator.h"
#import "CaculatorMaker.h"
@implementation NSObject (Caculator)

//設(shè)置一個(gè)返回值為int 接受 最終的結(jié)果?
//在這里面創(chuàng)建  CaculatorMaker計(jì)算類 在通過block參數(shù)傳出去 就不需要把其暴露在外面了
//如果這個(gè)方法被調(diào)用 就先創(chuàng)建  CaculatorMaker * make 然后在 回調(diào)傳進(jìn)來的block
//callBack(make)把make傳出去 然后在通過make設(shè)置make.add(10).add(20)
+(int)makeCaculator: (void(^)(CaculatorMaker * make))callBack{
    CaculatorMaker * make =[[CaculatorMaker alloc] init];
    callBack(make);
    return make.result;
}
/**
 *  就相當(dāng)于下面的例子
 */
 /*
[self loadData:^{
    //后執(zhí)行
    NSLog(@"被回調(diào)了");
}];

//block 是作為參數(shù)的
-(void)loadData:(void(^)())finished{
    //先執(zhí)行
    NSLog(@"執(zhí)行耗時(shí)操作");
    //block回調(diào)
    finished();
}
*/
@end
  • 外部的調(diào)用
外部的調(diào)用
   // block:使代碼高聚合
 int result =  [NSObject makeCaculator:^(CaculatorMaker *maker) {
        maker.add(10).add(30);
        maker.add(20).add(40);
        maker.multy(2).division(10);
        maker.jian(19);
    }];
    NSLog(@"%d",result);

總結(jié)

  • 之前開發(fā)中比較習(xí)慣,把事情封裝到一個(gè)方法中,
  • 鏈?zhǔn)骄幊趟枷?把要做的事情封裝到block,給外界提供一個(gè)返回這個(gè)Block的方法
  • 鏈?zhǔn)骄幊趟枷敕椒ㄌ攸c(diǎn):方法返回值必須是block,block參數(shù):放需要操作的內(nèi)容,block返回值:方法調(diào)用者

參考Demo:鏈?zhǔn)骄幊?-增強(qiáng)代碼的可讀性
工具的框架:鏈?zhǔn)骄幊?工具類
提煉Fundation最基本功能和最常見功能的寫法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纳账,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捺疼,更是在濱河造成了極大的恐慌疏虫,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卧秘,居然都是意外死亡呢袱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門翅敌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羞福,“玉大人,你說我怎么就攤上這事哼御∨髁伲” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵恋昼,是天一觀的道長。 經(jīng)常有香客問我赶促,道長液肌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任鸥滨,我火速辦了婚禮嗦哆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婿滓。我一直安慰自己老速,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布凸主。 她就那樣靜靜地躺著橘券,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卿吐。 梳的紋絲不亂的頭發(fā)上旁舰,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音嗡官,去河邊找鬼箭窜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛衍腥,可吹牛的內(nèi)容都是我干的磺樱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼婆咸,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼竹捉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起擅耽,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤活孩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憾儒,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡询兴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了起趾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诗舰。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖训裆,靈堂內(nèi)的尸體忽然破棺而出眶根,到底是詐尸還是另有隱情,我是刑警寧澤边琉,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布属百,位于F島的核電站,受9級(jí)特大地震影響变姨,放射性物質(zhì)發(fā)生泄漏族扰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一定欧、第九天 我趴在偏房一處隱蔽的房頂上張望渔呵。 院中可真熱鬧,春花似錦砍鸠、人聲如沸扩氢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽录豺。三九已至,卻和暖如春托嚣,著一層夾襖步出監(jiān)牢的瞬間巩检,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國打工示启, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兢哭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓夫嗓,卻偏偏與公主長得像迟螺,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舍咖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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