鏈?zhǔn)骄幊趟枷?下一級的block給上一級使用
思想:把需要做的事情封裝到block峦萎,給外接提供一個block方法
特點:方法返回值需要是block。block參數(shù):放需要操作的內(nèi)容榆骚,block返回值:方法調(diào)用者鲫寄。都是點語法。
代表:masonry框架
massory:
[view mas_makeConstraints:^(MASConstraintMaker *make){
make.left.top.equalTo(@10);
make.right.bottom.equalTo(@(-10));
}
void(^block)(MASConstraintMaker *make) = ^(MASConstraintMaker *make){
make.left.top.equalTo(@10);
make.right.bottom.equalTo(@(-10));
};
[view mas_makeConstraints:block];
====================
計算器Demo:
#import <Foundation/Foundation.h>
@interface CaculatorMaker : NSObject
@property (assign, nonatomic) int reslut;
- (CaculatorMaker *(^)(int num))add;
- (CaculatorMaker *(^)(int num))multy;
@end
#import "CaculatorMaker.h"
@implementation CaculatorMaker
- (CaculatorMaker *(^)(int num))add
{
return ^(int num){
_reslut += num;
return self;
};
}
- (CaculatorMaker *(^)(int num))multy
{
return ^(int num){
_reslut *= num;
return self;
};
}
@end
#import <Foundation/Foundation.h>
#import "CaculatorMaker.h"
@interface NSObject (Caculator)
//計算機都使用這個方法怪蔑,一調(diào)用這個方法就返回結(jié)果
+ (int)makeCaculator:(void(^)(CaculatorMaker *))block;
@end
#import "NSObject+Caculator.h"
@implementation NSObject (Caculator)
+ (int)makeCaculator:(void(^)(CaculatorMaker *))block
{
//創(chuàng)建計算對象
CaculatorMaker *maker = [[CaculatorMaker alloc] init];
//計算
block(maker);
return maker.reslut;
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
int result = [NSObject makeCaculator:^(CaculatorMaker *maker) {
//把所有的計算代碼封裝到這里
maker.add(10).add(20).multy(3);
}];
NSLog(@"%d",result);
}