前言:定义Block时,可以对Block的输入参数以及返回值的类型进行定义。可以有输入参数,也可以没有输入参数;可以设置一个输入参数,也可以设置多个参数;可以有返回值,也可以没有返回值。
1、无输入参数+无返回值
这种形式的Block,无需任何输入参数,并且无返回值,一般都是在该Block中完成一些动作,例如在完成一段动画后,执行一段Block,如下所示:
@interfaceUIView(UIViewAnimationWithBlocks)
+(void)animateWithDuration:(NSTimeInterval)duration animations:(void(^)(void))animations;
我们也可以自定义一个无输入参数、无返回值的Block,如下所示:
void(^blockWithOutInputAndOutput)(void)=^(void){
NSLog(@"block Called!");
};
2、有输入参数+无返回值
这种形式的Block,有输入参数,但无返回值。一般都是在该Block中根据输入参数完成一些动作,例如,在AFNetworking中,当获取到网络反馈的数据后,会调用一个Block,并且把从服务器获取的数据作为参数,传入Block。
-(AFHTTPRequestOperation*)POST:(NSString*)URLString
parameters:(id)parameters
success:(void(^)(AFHTTPRequestOperation*operation,id responseObject))success
failure:(void(^)(AFHTTPRequestOperation*operation,NSError*error))failure
{
AFHTTPRequestOperation*operation=[selfHTTPRequestOperationWithHTTPMethod:@"POST"URLString:URLStringparameters:parameters success:success failure:failure];
[self.operationQueue addOperation:operation];
returnoperation;
}
我们也可以自定义一个有输入参数、无返回值的Block,如下所示:
void(^blockWithInput)(int)=^(intinputNum){
NSLog(@"blockWithInput Called!");
};
3、有输入参数+有返回值
Block定义
int(^blockWithOutputAndInput)(int)=^(intinputNum){
NSLog(@"blockWithOutputAndInput Called!");
returninputNum;
};
Block调用
intintNumber2=blockWithOutputAndInput(200);
NSLog(@"blockWithOutputAndInput:%d",intNumber2);
4、有多个输入参数
可以在Block定义中传入多个参数。
Block的定义
double(^multiplyTwoValues)(double,double)=^(doublenumber1,doublenumber2){
returnnumber1*number2;
};
Block的调用
doubledoubleNumber=multiplyTwoValues(5.0,5.6);
NSLog(@"multiplyTwoValues: %f",doubleNumber);
5、无输入参数+有返回值
Block的定义
int(^blockWithOutput)(void)=^(void){
NSLog(@"blockWithOutput Called!");
return100;
};
Block的调用
intintNumber1=blockWithOutput();
NSLog(@"blockWithOutput:%d",intNumber1);