编写带有block参数的函数

简介

目前在编写IOS程序的过程中,对于block的使用比较多。一般都是使用iOS写好的API自带的block,但是自己也想写一些block作为参数的函数。如果是在同一个类中,可以异步编写一些代码。如果是在不同的类中,则可以这些数据的传递。但是当把block作为函数参数的时候,如何编写这样的函数一直不知所云,这几天有空就研究了一下,下面通过几个例子来说明一下。

不带参数的block

例如 想在某个方法结束后调用另外一个方法
-(void)blockDemo1:(void(^)() )completion{
NSLog(@"this is a no-param block");
if(completion)
completion();
}

//如果想在blockDeom1这个函数调用结束后调用另外一个函数,例如调用函数afterCompletion,则可以这样进行调用
//afterCompletion
-(void)afterCompletion{
NSLog(@"afterCompletion");
}

//调用
[self blockDemo1:^{
[self afterCompletion];
}

输出结果
14:24:42.892 blockParamDemo[1519:100012] this is a no-param block
14:24:42.892 blockParamDemo[1519:100012] afterCompetion

在这个例子中block函数completion的实现就是在调用afterCompletion,就是说block函数代码的实现是在调用它所在的函数的时候才实现。在block函数做为参数的时候,它只是个参数,就像其他参数一样使用。只是如果block函数带有参数的话,就可以向这个block函数传参,这个是和其实参数不一样的地方。下面就写一个带有参数的例子。

带参数的例子

//根据code值不同,向block输入不同的值。block可以根据这些不同的值在调用blockDemo2的时候实现不同的功能
-(void)blockDeom2:(void(^)(NSString*,NSString* ))block codeName:(int) code{
switch (code) {
case 1:
if (block) {
block(@"test1",@"error1");
}
break;
case 2:
if (block) {
block(@"test2",@"error2");
}
break;
default:
if (block) {
block(nil,nil);
}
break;
}
}

//调用这个函数
[self blockDeom2:^(NSString *error_code, NSString *error){
if (error) {
NSLog(@"error_code is %@",error_code);
}else{
NSLog(@"error is nil");
}
} codeName:2];

输出结果
15:00:14.998 blockParamDemo[1678:121030] error_code is test2

如果在不同的类之间调用带block参数的函数,则就可以完成参数的传递工作。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值