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

2016-03-12  本文已影响60人  20b347b28fc9

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


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();
            });
        });
    });
}
   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")
}
上一篇 下一篇

猜你喜欢

热点阅读