iOS中block作为一个函数的参数

本文探讨了在iOS开发中,如何将Block作为一个函数参数来使用。通过一个具体的例子展示了Block如何在`ViewController`中调用`AAA`类的`withBlock:`方法,并在`BBB`的成功或失败回调中执行。Block在此充当了回调函数的角色,简化了代码组织和阅读,避免了单独实现代理方法的需要。文章提到了Block作为函数参数的便利性,并邀请读者交流可能存在的错误或补充其他相关知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们首先设想有如下的一个头文件:

@interface ViewController : UIViewController

{

    AAA *aaa;

}


假设在这个ViewController的viewDidLoad函数内有如下一段代码

[aaa withBlock:^(NSString* error_code, NSError* error)

 {

     if(!error)

     {

         switch ([error_code intValue]) {

             case 0:

                 NSLog(@"获取成功!");

                 break;

             case 1:

                 NSLog(@"获取失败!");

                 break;

             default:

                 break;

         }

     }

     else

     {

         NSLog(@"error=%@",error);

     }

 }];


在AAA中的.m文件有withBlock:函数的定义,如下

+(void)withBlock:(void (^)(NSString *, NSError *))block

{

    [BBB success:^(RequestOperation *operation, id response) 

    {

        NSString* code=[response objectForKey:@"error_code"];

        

        if(block)

        {

            block(code, nil);

        }

    } 

         failure:^(RequestOperation *operation, NSError *error)

    {

        if(block)

        {

            block(nil, error);

        }

    }];    

}


aaa调用了withBlock:函数,参数是block类型的。这个参数封装了一段代码,这段代码什么时候执行呢?

是在ViewController的viewDidLoad函数内执行吗?


其实是在上面打下划线的那句执行的时候,那段被封装的代码得以执行。

这样看来作为函数的参数,block块类似于回调函数或者delegate。当函数调用了,当某个事件触发,这时blocks里的内容就会运行。这样有利于代码的整合和阅读,你不需要到别处实现代理方法。


以上只讨论block作函参这一情景,如有不对之处希望网友指正,其他还有一些(这些在百度上一搜一大片,不过基本上都是转的一个人的)也值得一看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值