闭包
- 闭包类似于 OC 中的 Block,是一段预先定义好的代码,在需要时执行
定义
- 体验UIView动画闭包
//: () -> Void 表示一个 `不需要参数,返回值为空` 的闭包类型
UIView.animateWithDuration(0) { () -> Void in
//
}
- 闭包表达式格式:
{ (形参名称1: 形参类型1, 形参名称2: 形参类型2, ...) -> 返回值 `in`
//要执行的代码
}
in 用于区分闭包定义和代码实现
- 定义闭包
// 定义闭包
var closure = { (text: String) -> Void in
}
- 调用闭包
// 调用闭包
closure("学习闭包")
闭包使用场景(回调)
- 模拟耗时操作
// 闭包的使用场景: 回调
// 在子线程执行完任务后通知调用者
func loadData(finished: (result: String) -> Void) {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("拼命加载数据: \(NSThread.currentThread())")
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print(": \(NSThread.currentThread())")
// 通知调用者
finished(result: "获取到20条数据")
})
}
}
- 调用
loadData { (result) -> Void in
print("网络请求完成: \(result)")
}
闭包的简写
// 当闭包的参数和返回都为空时可以省略 () -> Void in
UIView.animateWithDuration(1) {
}
// 闭包是最后一个参数,可以把闭包放在()后面,尾随闭包
UIView.animateWithDuration(1) { () -> Void in
}