鏈式編程
- 鏈式編程,其實就是通過
.
點語法將多行代碼鏈接成一句代碼,書寫簡潔、可讀性好,但代碼語法苦澀難懂。關于鏈式編程的使用那就是仁者見仁智者見智了。這篇文章主要介紹一下鏈式編程的簡單實現。先來看一下下面的代碼:
LTView *view = [[LTView alloc] initWithFrame:CGRectMake(100, 100, 0, 0) Config:^(LTView *view) {
view.lt_bgColor([UIColor redColor]).lt_viewWidth(100).lt_viewHeigth(100);
}];
如何實現
- 如何實現這樣的效果的呢?我們知道實現鏈式編程,需要能夠一直點下去,其實就是不斷地返回實例對象,什么有返回值呢?方法有返回值,但是絕大多數的方法不能用
.
調用,不過OC中有一種block類型的語法。那么到這里我們就有了一個基本的思路:使用Block語法實現,而且Block的返回值是該類的一個實例,然后在這個Block里我們去做一些相應的操作。
1、屬性方式
自定義LTView
類繼承UIView
,在view中聲明lt_bgColor
屬性,用來改變view的背景顏色,并重寫屬性的get
方法
//屬性聲明
@property (nonatomic, copy) LTView *(^lt_bgColor)(UIColor *);
//屬性get方法
- (LTView *(^)(UIColor *))lt_bgColor {
return ^(UIColor *color) {
self.backgroundColor = color;
return self;
};
}
說明:給view聲明一個block類型的屬性,block參數為UIColor *
,返回值為類的實例對象,屬性的get方法中返回就是這種類型的block。
2、函數聲明方式
同樣在LTView
類中如下兩個函數lt_viewWidth
,lt_viewHeigth
分別用來改變view的寬度和高度。函數實現如下:
//函數聲明
-(LTView *(^)(CGFloat width))lt_viewWidth;
-(LTView *(^)(CGFloat height))lt_viewHeigth;
//函數實現
- (LTView *(^)(CGFloat))lt_viewWidth {
return ^(CGFloat width) {
CGRect frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, width, self.frame.size.height);
self.frame = frame;
return self;
};
}
-(LTView *(^)(CGFloat))lt_viewHeigth {
return ^(CGFloat height) {
CGRect frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, height);
self.frame = frame;
return self;
};
}
最終實現效果
通過上面兩種方式,接下來我們就可以愉快的用點語法寫代碼了
view.lt_bgColor([UIColor blueColor]).lt_viewWidth(200).lt_viewHeigth(200);