具體的代碼參見 https://github.com/yanjie311/Chain-coding---primary
鏈?zhǔn)骄幊?/h3>
對于有一定開發(fā)經(jīng)驗(yàn)的人來說鏈?zhǔn)骄幊滩⒉荒吧泻芏嘀拈_源庫都是采用的這種編程方式封拧,在iOS庫中裁奇,Masory和Snapkit也是典型的使用鏈?zhǔn)骄幊痰睦印?br> 大體來說,鏈?zhǔn)骄幊叹褪菍⒍鄠€(gè)操作(多行代碼)通過某種操作符(通常是點(diǎn)號.)鏈接成一句的代碼.便代碼更加緊湊,可讀性也更好,降低了代碼的重復(fù)度.比如以下代碼:
//普通方法實(shí)現(xiàn)
[sender setImage:[UIImage imageNamed:@"newcreate_click.png"] forState:UIControlStateNormal];
sender.imageView.contentMode = UIViewContentModeScaleAspectFit;
[sender setTitle:@"你好" forState:UIControlStateNormal];
[sender setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
sender.titleLabel.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:sender];
//鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)
sender1.ImagePrams(@"newcreate_click.png",1)
.TitlePrams(@"你好", 17, [UIColor grayColor], 1)
.ClickAction(sender1);
[self.view addSubview:sender1];
通過這個(gè)例子讀者應(yīng)該可以更清楚的了解什么是鏈?zhǔn)骄幊田L(fēng)格.簡單來說,鏈?zhǔn)骄幊田L(fēng)格要有以下特點(diǎn):
- 通常是都是調(diào)用一個(gè)函數(shù)來給屬性賦值.也就是說,該函數(shù)封裝了賦值的語句,還可以在里面加入自己的判斷和一些邏輯.
- 該函數(shù)必須有一個(gè)返回值,通常是它本身.也可以是處理后的數(shù)據(jù)或者對象.
- 可以用靜態(tài)函數(shù)作為起始函數(shù),但是后面的全是實(shí)例函數(shù).
- 可以設(shè)定一個(gè)最終函數(shù),該函數(shù)不返回任何對象,用它來完成最后所有操作.
鏈?zhǔn)骄幊痰睦?/h3>
使用鏈?zhǔn)骄幊套钪饕暮锰幨强梢允勾a更簡潔,寫起來一種"爽快"感.設(shè)計(jì)優(yōu)秀的鏈?zhǔn)骄幊炭梢源蟠蠼档椭貜?fù)的代碼,增強(qiáng)邏輯感.不足之處就是對開
發(fā)者的業(yè)務(wù)邏輯能力要求較高,同時(shí)因?yàn)殒準(zhǔn)骄幊潭际钦{(diào)用函數(shù),所以有可能會造成過深的函數(shù)調(diào)用棧.稍微影響性能.
創(chuàng)建按鈕
WYJLinkerButton* sender1 = [WYJLinkerButton creatButton:CGRectMake(100, 100, 100, 100)];
sender1.ImageEdgInsets(20,0,60,60)
.TitleEdgInsets(0,63,100,23)
.ImagePrams(@"newcreate_click.png",1)
.TitlePrams(@"你好", 17, [UIColor grayColor], 1)
.ClickAction(sender1);
[self.view addSubview:sender1];
WYJLinkerButton* sender2 = [WYJLinkerButton creatButton:CGRectMake(100, 200, 100, 100)];
sender2.backgroundColor = [UIColor blueColor]; sender2.ImageEdgInsets(0,25,40,40).TitleEdgInsets(45,32,55,25).ImagePrams(@"newcreate_click.png",1).TitlePrams(@"不開心!",16,[UIColor redColor], 1).ClickAction(sender2);
sender2.jmImagev.layer.cornerRadius = 10;
sender2.jmImagev.layer.masksToBounds = YES;
[self.view addSubview:sender2];
WYJLinkerButton* sender3 = [WYJLinkerButton creatButton:CGRectMake(120, 300, 80, 30)];
sender3.ImageEdgInsets(0,2.5,25,25)
.TitleEdgInsets(27,2.5,55,25)
.ImagePrams(@"newcreate_click.png",1)
.TitlePrams(@"發(fā)微博",16,[UIColor blueColor], 1)
.ClickAction(sender3);
[self.view addSubview:sender3];
簡單舉例(給按鈕添加label)
-
.h
文件中的屬性寫法
** Title的參數(shù)值扎瓶,“(title, fountSize, textColor)” */
@property(nonatomic,copy)
WYJLinkerButton* (^TitlePrams)(NSString* title,NSInteger fountSize,UIColor*textColor, NSTextAlignment textAlignment);
-
.m
文件中的實(shí)現(xiàn)
- (WYJLinkerButton *(^)(NSString *, NSInteger, UIColor *, NSTextAlignment))TitlePrams {
return ^WYJLinkerButton* (NSString* title,NSInteger fountSize,UIColor*textColor, NSTextAlignment textAlignment){
self.jmLabel.text = title;
self.jmLabel.textColor = textColor;
self.jmLabel.font = [UIFont systemFontOfSize:fountSize];
self.jmLabel.textAlignment = textAlignment;
return self;
};
}
github上有具體的代碼參考庄涡,歡迎大家批評指正双炕,謝謝