直接上代码
import UIKit
classViewController:UIViewController{
// 1. 没有参数,没有返回值的闭包()->() 如果没有参数,没有返回值,in可以省略
letb1 = {
print("没有参数,没有返回值的闭包")
}
overridefuncviewDidLoad() {
super.viewDidLoad()
// 执行闭包
b1()
// 2. 带参数的闭包 参数,返回值,实现代码都是写在{}中
// {形参列表 - >返回值类型 // 实现代码}
// 使用 in 分割定义和实现 b2的类型: (String) -> ()
letb2 = { (str:String) ->()in
print(str)
}
// 执行闭包
b2("带参数的闭包")
// 3.带参数/返回值的闭包
// (String) -> String
let b3 = {(Str:String) ->Stringin
returnStr +"回值的闭包"
}
// 闭包调用
print(b3("带参数/返"))
// 4.异步执行任务,获取数据,通过block/闭包回调,闭包的应用场景和闭包一样
loadData{ (result)in
print(result)
}
}
//4操作步骤
funcloadData(completion:@escaping(_result: [String]) ->()) -> () {
// 将任务添加到队列,执行任务的操作,队列的调度是以同步/异步执行任务
DispatchQueue.global().async{
print("耗时操作\(Thread.current)")
// 休眠
Thread.sleep(forTimeInterval:1.0)
// 获得数据
letjson = ["后台","数据","异步回调"]
//主线程更新
DispatchQueue.main.async(execute: {
print("主线程更新UI\(Thread.current)")
// 回调,执行,通过参数回调
completion(json)
})
}
}
}