iOS-手把手教你如何写block

87 篇文章 1 订阅

刚入门iOS,感觉block语法好神奇,是如何把函数的局部变量共享到外部函数以及全局变量呢?

实战情景

现在有个情景,是请求网络成功后把成功或者失败的结果回调给外部,外部收到请求的结果进行相应的处理。
现在创建一个NetWork类,为外界面提供一个方法:请求数据结果回调。如下面一端代码

#import <Foundation/Foundation.h>

@interface NetWork : NSObject

//请求数据
- (void)requestDataComplete:(void(^)(BOOL success,id obj))complete;

@end

第二步,在NetWork类中定义一个私有的属性变量 ,保存外界调用的block变量。如下:

@interface NetWork()
@property (nonatomic,copy)void(^complete)(BOOL success,id obj);//私有变量,保存外界调用的block变量
@end

第三步,请求完成,回调数据给外界。
e.g:self.complete(YES,@”请求成功”); //以这种方式回调。

    //模拟请求数据 2秒后请求成功
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        //模拟结果一:成功回调字符串
        self.complete(YES, @"请求成功");
//        //模拟结果二:成功回调NSData
//        NSData *dataSuccess = [NSData new];
//        self.complete(YES, dataSuccess);

//        //模拟结果三:失败回调字符串
//        self.complete(NO, @"请求失败");
//        //模拟结果四:失败回调NSData
//        NSData *dataError = [NSData new];
//        self.complete(NO, dataError);
    });

第四步,外界如何实现。
在ViewController中,

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [[NetWork alloc] requestDataComplete:^(BOOL success, id obj) {
        if (success) {
            NSLog(@"请求成功,回调数据:%@",obj);
        }else{
            NSLog(@"请求失败,回调数据:%@",obj);
        }
    }];
}

block变量的写法原来如此简单。。。
喜欢的欢迎点赞支持,你的支持,我的动力!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值