import UIKit
/*
swift中的闭包和OC中的block非常类似 可以说几乎一样
block
1.预先准备好的一段可执行的代码
2.可以当做参数传递
3.在需要的时候执行block
4.block中使用 self 需要注意循环引用 但是一定会引起循环引用?
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
demo1()
}
//'尾' 随闭包
//尾随闭包是闭包的一种简写
//当函数的最后一个参数是闭包的时候就可以改成尾随闭包
func demo1() {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
}
dispatch_async(dispatch_get_global_queue(0, 0), {() -> () in
})
}
func callDemo() {
//没有参数 没有返回值的闭包 删除 () -> esc键
//闭包的作用 用来完成回调
loadData { () -> () in
print("终于拿到网络数据")
}
//闭包的定义 和 代码中间 需要加一个 in 来分隔
loadData({ () -> () in
print("终于拿到数据")
})
}
//模拟网络异步加载数据
//loadData 通过闭包回调数据
//闭包类型和参数很像 只是没有函数 名
func loadData(finished: () -> ()) {
//开始异步加载数据
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("开始耗时任务: 加载数据")
//完成加载数据 在主线程回调
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//执行闭包 和执行函数一模一样
//闭包 就是一个匿名函数
print("come here");
//小括号 表示执行
finished()
// { () -> () in
// print("终于拿到网络数据")
// }()
})
}
}
}
swift闭包
最新推荐文章于 2022-03-09 11:06:01 发布