美文网首页
swift语法--12-1闭包基本概念

swift语法--12-1闭包基本概念

作者: 20b347b28fc9 | 来源:发表于2016-03-12 01:23 被阅读60次

swift语法--12-1闭包基本概念


block和闭包区别
  • OC:

    • block类似于匿名函数, 用于封装代码块, 在特殊的时候执行
    • 执行一些耗时操作,用于回调
    • 类型: 返回值类型(^block名称)(形参列表)
    • 值:
    ^(形参列表){
       需要执行的代码
    }
    
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self loadData:^{
        //3.主线程刷新UI
        NSLog(@"更能UI");
    }];
    
}

- (void)loadData:(void(^)())finished
{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        //1.子线程加载数据
        NSLog(@"%@", [NSThread currentThread]);
        NSLog(@"加载数据");
        dispatch_async(dispatch_get_main_queue(), ^{
            
            //2.主线程回调
            dispatch_async(dispatch_get_main_queue(), ^{
                
                NSLog(@"%@", [NSThread currentThread]);
                finished();
            });
        });
    });
}
  • Swift:

    • 闭包是用于定义函数(Swift中函数就是闭包, 闭包就是一个特殊的函数)
    • 执行一些耗时操作,用于回调
    • 类型: (形参列表)->返回值类型
    • 值:
    {
        (形参列表)->返回值类型
         in
         需要执行的代码
    }
    
   override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        loadData { () -> () in
            
            //3.在主线程更新UI
            print("更新UI")
        }
    }
    
    func loadData(finished: ()->())
    {
        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
            
            //1.子线程下载数据
            print(NSThread.currentThread())
            print("加载数据")
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                
                //2.加载完数据,主线程回调
                print(NSThread.currentThread())
                finished()
                
            })
        }
    }

闭包的几种格式

1. 完整写法
loadData ({ () -> () in
    print("更新UI")
})
//in是用于区分代码和描述
2. 如果闭包没有形参, 那么in和in之前的代码都可以省略
loadData ({
    print("更新UI")
})
3. 如果闭包是函数的最后一个参数, 那么闭包可以写在函数()的后面
loadData (){
    print("更新UI")
}
4. 如果函数只有一个闭包参数, 那么函数的()可以省略
loadData {
    print("更新UI")
}

相关文章

  • swift语法--12-1闭包基本概念

    swift语法--12-1闭包基本概念 block和闭包区别 OC:block类似于匿名函数, 用于封装代码块, ...

  • 使用Playground快速练习Swift语法--闭包和枚举

    闭包 定义:闭包是自包含的函数代码块,可以在代码中被传递和使用。 闭包表达式语法 Swift闭包使用{}包含,in...

  • Swift语法--12-3闭包的循环引用

    Swift语法--12-3闭包的循环引用 闭包循环引用产生条件 如果在HttpTool中有对闭包进行强引用,则会形...

  • Swift语法--闭包

    待续

  • 151230

    快速浏览了下Swift语法: A Swift Tour php link mysql 对于闭包的理解还差得很远,...

  • Swift 闭包

    闭包是特殊的函数 Swift 中,闭包其实是一个特殊的函数,匿名函数 输出 闭包语法 简写: 简写规则: 如果是单...

  • Swift 一懒加载

    在swift里懒加载都是以闭包语法存在 private var testImageView: UIImageVie...

  • Closures——闭包

    Swift 2.2 我总是觉得 Swift 的语法书有点晦涩。看的不是那么让人理解。说实在话,语法书的闭包我看了好...

  • swift 随笔:闭包及数组三大高阶函数

    简介Swift一大特性便是使用简洁的头等函数闭包语法代替了复杂的blocks语法。希望我们在Swift中不再需要像...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

网友评论

      本文标题:swift语法--12-1闭包基本概念

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