// 逃逸闭包 :闭包的调函数结束之后或作用域之外
// 非逃逸闭包:闭包的调用再函数结束之前
// 逃逸闭包不能捕获inout 输入输出参数
class anayaa {
typealias fn = (Int)->(Int)
var getfun :((Int)->(Int))?
// 调用函数 传进来的闭包表达式 不在函数作用域调用,而是赋值给变量,在作用域以外调用
func anayfun(fn:@escaping fn) {
getfun = fn
}
func action(){
print("调用逃逸闭包-\(self.getfun!(2))")
}
}
func anayaatest(o:inout Int){
let ana = anayaa()
ana.anayfun() { (b)->(Int) in
// 逃逸闭包不能捕获inout 输入输出参数o
// let c = b + 4 + o
let c = b + 4
return c
}
// 简化
// ana.anayfun(a: 2) {
// return $0+4
// }
ana.action()
print("调用逃逸闭包-\(ana.getfun!(2))")
}
var a = 3
anayaatest(o:&a)
// 第二种情况
class dispatchc {
typealias fn = (Int)->(Int)
var a = 0
// DispatchQueue 在函数结束后才调用时
func anayfun(a:Int, fn:@escaping fn) {
DispatchQueue.global().async {
[weak self] in // 避免循环引用
print(fn(a))
self?.a = 10
}
}
}