21 闭包

作者: 猴子的救兵520 | 来源:发表于2017-07-05 19:33 被阅读39次

    闭包的介绍

    • 闭包和OC中的block非常相似

      • OC中的block是匿名的函数
      • Swift中的闭包是一个特殊的函数
      • block和闭包都经常用于回调
    • 注意:闭包和block一样,第一次使用时可能不习惯它的语法,可以先按照使用简单的闭包,随着学习的深入,慢慢掌握其灵活的运用方法.

    闭包的使用

    block的用法回顾

    • 定义网络请求的类
    @interface HttpTool : NSObject
    - (void)loadRequest:(void (^)())callBackBlock;
    @end
    
    @implementation HttpTool
    - (void)loadRequest:(void (^)())callBackBlock
    {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            NSLog(@"加载网络数据:%@", [NSThread currentThread]);
    
            dispatch_async(dispatch_get_main_queue(), ^{
                callBackBlock();
            });
        });
    }
    @end
    
    • 进行网络请求,请求到数据后利用block进行回调
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self.httpTool loadRequest:^{
            NSLog(@"主线程中,将数据回调.%@", [NSThread currentThread]);
        }];
    }
    
    • block写法总结:
        // 类型:
        返回值(^block的名称)(block的参数)
    
        // 值:
        ^(参数列表) {
            // 执行的代码
        };
    

    使用闭包代替block

    • 定义网络请求的类
    class HttpTool: NSObject {
        
        func loadRequest(callBack : @escaping ()-> ()) {
            
            DispatchQueue.global().async { () -> Void in
                print("加载数据", Thread.current)
                
                DispatchQueue.main.async { () -> Void in
                    callBack()
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:21 闭包

          本文链接:https://www.haomeiwen.com/subject/euxrcxtx.html