定义Block时,可以对Block的输入参数以及返回值的类型进行定义。可以有输入参数,也可以没有输入参数;可以设置一个输入参数,也可以设置多个参数;可以有返回值,也可以没有返回值。
1、无输入参数+无返回值
这种形式的Block,无需任何输入参数,并且无返回值,一般都是在该Block中完成一些动作,例如在完成一段动画后,执行一段Block,如下所示:
- @interface UIView(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 = [self HTTPRequestOperationWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure];
- [self.operationQueue addOperation:operation];
- return operation;
- }
我们也可以自定义一个有输入参数、无返回值的Block,如下所示:
- void (^blockWithInput)(int) = ^(int inputNum) {
- NSLog(@"blockWithInput Called!");
- };
3、有输入参数+有返回值
- Block定义
- int (^blockWithOutputAndInput)(int) = ^(int inputNum) {
- NSLog(@"blockWithOutputAndInput Called!");
- return inputNum;
- };
- Block调用
- int intNumber2 = blockWithOutputAndInput(200);
- NSLog(@"blockWithOutputAndInput:%d",intNumber2);
4、有多个输入参数
可以在Block定义中传入多个参数。
- Block的定义
- double (^multiplyTwoValues)(double, double) = ^(double number1, double number2) {
- return number1 * number2;
- };
- Block的调用
- double doubleNumber = multiplyTwoValues(5.0,5.6);
- NSLog(@"multiplyTwoValues: %f",doubleNumber);
5、无输入参数+有返回值
- Block的定义
- int (^blockWithOutput) (void) = ^(void){
- NSLog(@"blockWithOutput Called!");
- return 100;
- };
- Block的调用
- int intNumber1 = blockWithOutput();
- NSLog(@"blockWithOutput:%d", intNumber1);