iOS開發(fā)之鏈式編程

? ? ? 很多小伙伴在開發(fā)的過程當中會見到一個很神秘的詞--鏈式編程,那么到底什么是鏈式編程,鏈式編程到底有什么神奇之處呢唐全?一開始我是很怵這個詞的唆垃,總感覺它特別的高深莫測肛真,但最近由于工作需要袁铐,對這個詞進行一番琢磨推敲之后,我才發(fā)現(xiàn)這個家伙原來真的別有洞天淘衙,也收獲一些心得传藏,跟大家分享一下:

? ? ? 鏈式編程-顧名思義,鏈式,連貫性為其主要特征毯侦,放在編程領(lǐng)域來講哭靖,說簡單點就是把一系列的代碼執(zhí)行動作串聯(lián)起來,不用單獨一個一個的執(zhí)行侈离,話不多說试幽,來舉個例子:就是在很多文章中出現(xiàn)的計算器模型(CaculatorManager),我也是根據(jù)這個模型來理解鏈式編程的卦碾,所以我用自己理解的方式來給大家解析這個例子:

1. ?我們先直觀看一下這個鏈式編程用代碼寫出來是什么樣子:

鏈式編程1

好吧铺坞,我相信很多朋友第一次看到這坨代碼之后是一臉的MB(至少我是),這是什么鬼洲胖?莫急济榨,接下來我們就來看看這到底是什么東東。雖然一臉MB绿映,但細心的小伙伴會發(fā)現(xiàn)一個很關(guān)鍵的部分擒滑,就是那條“鏈”--caculator.add(1).add(10).sub(2)這句代碼看起來確實很像一條鏈子呦叉弦,但這啥意思呢橘忱?沒見過這樣寫代碼的啊卸奉!莫急,冷靜颖御,再看榄棵,有沒有發(fā)現(xiàn)這個有點類似平時我們用的點語法呢?嗯潘拱,的確疹鳄,但是沒見過這么一大串的點語法啊,你這又不是model取值芦岂,咋實現(xiàn)氨窆?

2. ?好了禽最,下面腺怯,就是見證奇怪的時刻:

(個人理解)鏈式編程的關(guān)鍵在于點語法的左邊代碼必定為點語法右邊代碼的執(zhí)行對象,即:(執(zhí)行對象).(方法)川无,也就是說呛占,無論“.”左邊的代碼鏈有多長,最終會返回一個對象來執(zhí)行“.”右邊的方法懦趋,因為本例中的CaculatorManager類型對象包含add與sub兩個實例方法晾虑,所以上圖中的對象caculator調(diào)用方法add(1),必定返回一個CaculatorManager類對象,來調(diào)用后面的方法帜篇,上圖:

鏈式編程2

如此糙捺,這就是我所理解的鏈式編程的基本原理(當然不僅僅局限于一個類);

朋友們看到這笙隙,腦海中可能有那么一點點閃光了洪灯,哦~原來是醬紫,但是逃沿,僅僅如此嗎婴渡?具體咋實現(xiàn)呢?

3. ?下面就介紹鏈式編程另一個關(guān)鍵點--block:

先來看一下一個完整的block咋寫呢凯亮?

/******?返回值 (^block名稱) (參數(shù))*******/

如此边臼,上文所說到的返回類對象就應(yīng)該寫為/****** CaculatorManager * (^block名稱) (參數(shù))*******/,這樣這個對象調(diào)用這個block的時候返回self就可以了假消;

上代碼:.h文件中代碼如下:

鏈式編程3

可見柠并,我們將先前討論的block命名為CaculBlock,返回值為CaculatorManager類型,參數(shù)為int型(這個就是加數(shù))富拗;

緊接著定義加法函數(shù):- (CaculBlock) add; 這個方法的返回值為上面的CaculBlock類型臼予,而且這個CaculBlock是帶參數(shù)的,所以在調(diào)用這個函數(shù)的時候啃沪,雖然這個函數(shù)沒有參數(shù)粘拾,但是這個返回block可以帶參數(shù),相當于對這個block進行調(diào)用创千,例如實現(xiàn)“+10”功能缰雇,傳統(tǒng)寫法為:[對象? add](10), 點語法調(diào)用為:對象.add(10)追驴,返回值仍為同類對象;

再來看.m文件中的代碼:

鏈式編程4

可見械哟,方法內(nèi)部實現(xiàn)了一個CaculBlock,對傳進來的參數(shù)做累加處理,用自身屬性result保存殿雪,add函數(shù)看似是返回一個block暇咆,實則返回的是self,減法函數(shù)同理丙曙;

現(xiàn)在我們再返回看一下本文的第一張圖片爸业,現(xiàn)在應(yīng)該差不多明白中間的那行代碼是啥意思了吧,就是(1+10-2)河泳;但是沃呢,最外面那一層又是什么意思呢?還是表示MB拆挥;其實薄霜,最外一層的代碼就是一個調(diào)用計算器的過程某抓;

4. ?調(diào)用計算器:

給 NSObject 新建一個類目(Caculator)——(個人感覺這樣是為了方便調(diào)用),直接上代碼:

鏈式編程5?
鏈式編程6

至此惰瓜,就與文章開頭銜接上了否副,這也只是一個初步的認識,希望會對大家有所幫助崎坊,也希望大家多提寶貴意見备禀,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奈揍,一起剝皮案震驚了整個濱河市曲尸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌男翰,老刑警劉巖另患,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛾绎,居然都是意外死亡昆箕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門租冠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹏倘,“玉大人,你說我怎么就攤上這事顽爹∠吮茫” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵镜粤,是天一觀的道長夕吻。 經(jīng)常有香客問我,道長繁仁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任归园,我火速辦了婚禮黄虱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庸诱。我一直安慰自己捻浦,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布桥爽。 她就那樣靜靜地躺著朱灿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钠四。 梳的紋絲不亂的頭發(fā)上盗扒,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天跪楞,我揣著相機與錄音,去河邊找鬼侣灶。 笑死甸祭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的褥影。 我是一名探鬼主播池户,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凡怎!你這毒婦竟也來了校焦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤统倒,失蹤者是張志新(化名)和其女友劉穎寨典,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檐薯,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡凝赛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坛缕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墓猎。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赚楚,靈堂內(nèi)的尸體忽然破棺而出毙沾,到底是詐尸還是另有隱情,我是刑警寧澤宠页,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布左胞,位于F島的核電站,受9級特大地震影響举户,放射性物質(zhì)發(fā)生泄漏烤宙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一俭嘁、第九天 我趴在偏房一處隱蔽的房頂上張望躺枕。 院中可真熱鬧,春花似錦供填、人聲如沸拐云。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叉瘩。三九已至,卻和暖如春粘捎,著一層夾襖步出監(jiān)牢的瞬間薇缅,已是汗流浹背危彩。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捅暴,地道東北人恬砂。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蓬痒,于是被迫代替她去往敵國和親泻骤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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