一行代碼設(shè)置N個屬性-OC(iOS)鏈?zhǔn)秸Z法生成器

一遥倦、簡述

鏈?zhǔn)秸Z法非常吸引人玫鸟,簡潔明了缓熟,我第一眼看到就非常喜歡,也在思考如何在OC中實現(xiàn)鏈?zhǔn)骄幊棠?于是在百度找原理如何在Objective-C中實現(xiàn)鏈?zhǔn)秸Z法走诞? - CocoaChina_讓移動開發(fā)更簡單

在github找到兩個比較全的鏈?zhǔn)綆觳⒀芯苛似饋硪约爸腗asonry副女。

GitHub - Draveness/ChainableKit: Chainable UIKit in Objective-C

GitHub - qddnovo/LinkBlock: 這是objc的鏈?zhǔn)骄幊炭蚣埽瑸榱藴p少換行和中括號的干擾速梗,讓我們可以專注于編碼的邏輯肮塞。//LinkBlock(objective-c )

一開始我是一個方法一個方法地寫,后面在想姻锁,如果我在category添加了方法枕赵,對應(yīng)的鏈?zhǔn)椒椒斜硪惨砑樱疫@么多方法位隶,也很難寫全拷窜。因此與其自己一個一個寫方法,不如寫好程序讓其自動生成涧黄。這個OC的運(yùn)行時完全可以做到篮昧,把類的方法提取出來,然后生成文件笋妥。


二懊昨、實現(xiàn):

1.參數(shù)的傳遞

由于參數(shù)的數(shù)量是不確定的,為了方便從不定參數(shù)中對出相應(yīng)參數(shù),把所有參數(shù)都封裝成對象,調(diào)用方法時再還原為原來的參數(shù)(封裝成對象使用了Masonry的MASBoxValue以及RAC的宏定義)囚玫。

比如view的hidden灾常,參數(shù)為bool值运敢,則使用宏定義

#define hidden(...) hidden(ml_chain_MASBoxValue(metamacro_at(0, __VA_ARGS__)))

view的frame為結(jié)構(gòu)體,

#define frame(...) frame(ml_chain_MASBoxValue(metamacro_at(0, __VA_ARGS__)))

為了進(jìn)一步便利,結(jié)構(gòu)體會有兩個宏定義

#define frame_(...)? frame(ml_chain_MASBoxValue(CGRectMake(__VA_ARGS__)))

在實際使用時,可以frame(CGRectMake(100, 100, 100, 100)),也可以frame_(100, 100, 100, 100)簿姨,兩者等效

2.方法的提取規(guī)則

只提取返回值為void的實例方法

3.方法的調(diào)用

先根據(jù)self和SEL得出methodSignature,由于之前把所以參數(shù)都封裝成對象簸搞,如果實際參數(shù)不是對象的話扁位,把參數(shù)還原成本來的值,并用NSInvocation一一代入趁俊。


三贤牛、鏈?zhǔn)秸Z法生成器的使用

1.前往GitHub - luomagaoshou/MLChain下載(pods還沒有審核通過,所以要手動下載)

2.將Category文件夾與ChainHelper文件夾拖入項目

3.導(dǎo)入 #import "NSObject+ChainFileCreater.h"

4.調(diào)用方法则酝,把要生成的類放入數(shù)組中,如[NSObject ml_chainCreateChainFileWithClassNames:@[[UITableView class], [CALayer class], [CABasicAnimation class], [UIButton class]]]; ?此方法用于生成文件,生成一次即可沽讹。

5.運(yùn)行代碼般卑,桌面會多了個MLChain的文件夾,再把文件夾拖到項目(里面的文件就是鏈?zhǔn)椒椒?爽雄,并在需要用的時候?qū)?import "MLChain.h"蝠检。

注意點:(1).如果有方法重名需要手動刪除

(2).不管是私有方法還是公有方法都會生成,使用需要注意


四挚瘟、代碼示例

UIView *view1 = [[UIView alloc] init];

//創(chuàng)建實例后調(diào)用

view1.ml_make.backgroundColor([UIColor orangeColor]).

frame(CGRectMake(50, 100, 100, 100));

[self.view addSubview:view1];

//使用frame_叹谁,有時候比較方便

UIView *view2 = UIView.ml_make.backgroundColor([UIColor greenColor]).frame_(50, 220, 100, 100).view;

[self.view addSubview:view2];

//使用類方法進(jìn)行設(shè)置,需要注意的是使用類方法ml_make是沒有代碼提示的乘盖,不是很方便的一點

UIView.ml_make.backgroundColor([UIColor grayColor]).

frame_(50, 340, 100, 100).

moveToSuperview(self.view);

效果圖如下

五焰檩、優(yōu)缺點

(一)優(yōu)點:1.所有的方法都來自系統(tǒng)或者自己寫的方法,上手快

2.使用中間量作為橋梁賦值订框,侵入性低析苫,不影響原有類

(二)缺點:1.由于使用invocation替代直接調(diào)用方法,調(diào)試起來難度增加不少

2.block的返回值使用instancetype沒有點語法穿扳,若指針類型上移衩侥,需要用lookupMakerOfXXX找回來

3.私有方法沒有完全過濾,容易誤用錯用

4.在較底層的類如QuartzCore框架矛物, 有許多Ref類型茫死,如果沒有逐一寫好轉(zhuǎn)換方法,賦值時會造成無效或崩潰


?此處應(yīng)有demo?GitHub - luomagaoshou/MLChainDemo


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末履羞,一起剝皮案震驚了整個濱河市峦萎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吧雹,老刑警劉巖骨杂,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雄卷,居然都是意外死亡搓蚪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門丁鹉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妒潭,“玉大人,你說我怎么就攤上這事揣钦■ㄔ郑” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵冯凹,是天一觀的道長谎亩。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么匈庭? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任夫凸,我火速辦了婚禮,結(jié)果婚禮上阱持,老公的妹妹穿的比我還像新娘夭拌。我一直安慰自己,他們只是感情好衷咽,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布鸽扁。 她就那樣靜靜地躺著,像睡著了一般镶骗。 火紅的嫁衣襯著肌膚如雪桶现。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天卖词,我揣著相機(jī)與錄音巩那,去河邊找鬼。 笑死此蜈,一個胖子當(dāng)著我的面吹牛即横,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裆赵,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼东囚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了战授?” 一聲冷哼從身側(cè)響起页藻,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎植兰,沒想到半個月后份帐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡楣导,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年废境,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筒繁。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡噩凹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毡咏,到底是詐尸還是另有隱情驮宴,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布呕缭,位于F島的核電站堵泽,受9級特大地震影響修己,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迎罗,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一箩退、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佳谦,春花似錦、人聲如沸滋戳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奸鸯。三九已至咪笑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娄涩,已是汗流浹背窗怒。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蓄拣,地道東北人扬虚。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像球恤,于是被迫代替她去往敵國和親辜昵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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