block的使用
2018-02-02 本文已影响3人
Fight_Code
#import <Foundation/Foundation.h>
@class EOCBlock;
//枚举block
typedef void (^TypedefBlock)(int param1, int param2);
@interface EOCBlock : NSObject
//声明block属性
@property (nonatomic, copy)int (^oneParamBlock)(int param);
@property (nonatomic, copy)void (^twoParamBlock)(int param1, int param2);
@property (nonatomic, copy)int (^noParamBlock)(void);
@property (nonatomic, assign)int result;
-(void)doT;
//block作为入参
-(void)doTBlock:(void(^)(int param1, int param2))twoParamBlock;
//block作为出参
-(void(^)(int param1, int param2))doGetBlock;
//block作为出参的应用
-(EOCBlock *(^)(int param))doContinueBlock;
@end
#import "EOCBlock.h"
@implementation EOCBlock
-(void)doT{
int v = self.oneParamBlock(5);
NSLog(@"xxx:%d",v);
}
-(void)doTBlock:(void (^)(int, int))twoParamBlock
{
twoParamBlock(1,2);
NSLog(@"doTBlock");
}
-(void (^)(int, int))doGetBlock
{
return ^(int p1,int p2){
NSLog(@"doGetBlock : %d",p1);
};
}
-(EOCBlock *(^)(int))doContinueBlock
{
return ^EOCBlock *(int p){
_result *= p;
return self;
};
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
__block int mult = 2;
EOCBlock *e = [[EOCBlock alloc] init];
e.oneParamBlock = ^int(int param) {
//如果想要在block修改外部的变量,外部的变量需要用static、全局、__block
mult = 3;
return param * mult;
};
//必须先初始化block,再输出
[e doT];
NSLog(@"%@",e.oneParamBlock);
//block作为入参
[e doTBlock:^(int param1, int param2) {
NSLog(@"param1:%d",param1);
}];
//block作为出参
void (^block)(int,int) = [e doGetBlock];
block(1,2);
//block出参应用
e.result = 1;
e.doContinueBlock(1).doContinueBlock(2).doContinueBlock(3);
NSLog(@"result:%d",e.result);
}