鏈?zhǔn)秸{(diào)用也是所謂的鏈?zhǔn)骄幊坦保窃贛asonry中寫法看起來十分直觀,調(diào)用起來也很簡(jiǎn)單耀销。在特定的應(yīng)用環(huán)境下利用block實(shí)現(xiàn)鏈?zhǔn)骄幊萄郑_實(shí)會(huì)大大的使代碼直觀易讀。
[_contentView addSubview:_imgView];
[_imgView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(@(20));
make.top.equalTo(@(20));
make.bottom.equalTo(@(-20));
make.height.equalTo(@(CellHeight - 40));
make.width.equalTo(self.imgView.frame.height);
}];
1. 方法的通常調(diào)用過程
// Animal.h 中定義
- (void)eat;
- (void)sleep;
// Animal.m 中實(shí)現(xiàn)
- (void)eat {
NSLog(@"%s", __FUNCTION__);
}
- (void)sleep {
NSLog(@"%s", __FUNCTION__);
}
// 通常調(diào)用過程
Animal *animal = [[Person alloc] init];
[animal sleep];
[animal eat];
2. 普通的鏈?zhǔn)秸{(diào)用
普通的鏈?zhǔn)秸{(diào)用就是我們常見的树姨,多個(gè)[ ]方法調(diào)用嵌套在一起摩桶,達(dá)到鏈?zhǔn)秸{(diào)用的效果,還是比較好理解帽揪,也比較常用硝清。
// Animal.h 中定義
- (Animal *)eat;
- (Animal *)sleep;
// Animal.m 中實(shí)現(xiàn)
- (Animal *)eat {
NSLog(@"%s", __FUNCTION__);
return self;
}
- (Animal *)sleep {
NSLog(@"%s", __FUNCTION__);
return self;
}
// 鏈?zhǔn)秸{(diào)用
[[animal eat] sleep];
//[[animal sleep] eat];
3. 用block實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用
如下定義相當(dāng)于直接使用block變量的get方法:
// Animal.h 中定義
- (void (^)())eat;
- (void (^)())sleep;
// Animal.m 中實(shí)現(xiàn)
- (void (^)())eat {
void (^eatBlock)() = ^ {
NSLog(@"%s", __FUNCTION__);
};
return eatBlock;
}
- (void (^)())sleep {
return ^ {
NSLog(@"%s", __FUNCTION__);
};
}
// 調(diào)用
animal.eat();
animal.sleep();
則,block的鏈?zhǔn)秸{(diào)用
// Animal.h 中定義
- (Animal * (^)(NSString *foodName))eat;
- (Animal * (^)(NSInteger hour))sleep;
// Animal.m 中實(shí)現(xiàn)
- (Animal *(^)(NSString *))eat {
Animal * (^eatBlock)() = ^(NSString *foodName) {
NSLog(@"吃: %@", foodName);
return self;
};
return eatBlock;
}
- (Animal *(^)(NSInteger))sleep {
return ^(NSInteger hour) {
NSLog(@"睡%ld", (long)hour);
return self;
};
}
// 鏈?zhǔn)秸{(diào)用
animal.eat(@"蛋糕").sleep(8);
animal.sleep(8).eat(@"面包");
4. 請(qǐng)實(shí)現(xiàn)一個(gè)例子
我們創(chuàng)建一個(gè)view转晰,平常初始化時(shí)會(huì)直接調(diào)用其.frame芦拿、.backgroundColor等方法設(shè)置樣式。大家可以試著使用鏈?zhǔn)骄幊谭绞綄?shí)現(xiàn)以下功能:
CustomView *custom = [CustomView makeCustomView:^(CustomView *custom) {
custom.viewFrame(CGRectMake(50, 50, 200, 200)).viewColor([UIColor cyanColor]);
}];
[self.view addSubview:custom];