前言:就像OC中的block一样,Swift中的闭包也把我搞得晕头转向的(人太笨)趁着失业,好好总结总结来年再战
// MARK:- NO.1 简单举例
#首先对Swift中的函数大家熟悉吧
函数名(形参)-> (返回值类型) {
执行代码
}
func <#name#>(<#parameters#>) -> <#return type#> {
<#function body#>
}
//写个最简单的闭包
let work = {
print(“工作在哪里")
}
//这个闭包是一个没有参数,没有返回值的函数—调用
work()
// MARK:- NO.2 有参数的闭包
#在闭包中:参数,返回值,实现代码都是写在{}中的
#在定义和实现之间需要关键字”in”来分隔 — {参数 ->返回值类型 in 实现代码 }
let eg = { (x: Int) -> () in
print(x)
}
eg (78)
// MARK:- NO.3 有参数有返回值的闭包
let eg1 = { (x: Int , y: Int) -> Int in
return x + y
}
print(eg1(10, 39))
// MARK:- NO.4 闭包作为参数传递(异步执行回调数据)
//调用
loadData { (result) in
print("获取到数据\(result)")
}
func loadData(completion: @escaping (_ result: [String]) -> ()) -> () {
// 将任务添加到队列,指定执行任务的函数
// 队列调度任务(block/闭包),以同步/异步方式执行
//全局队列异步执行
DispatchQueue.global().async {
print("耗时操作 \(Thread.current)")
//获得结果
let data = ["麦迪","科比","奥胖"]
//获取一些结果,然后主队列回调
DispatchQueue.main.async(execute: {
print("主线程更新UI\(Thread.current)")
completion(data)
})
}
}
网友评论