swift|swift @escaping
@escaping用于函数参数,作用于闭包
如果一个闭包被作为一个参数传递给一个函数,并且在函数return之后才被唤起执行,那么这个闭包是逃逸闭包。
在swift2中,有@noescape属性,对应非逃逸闭包,也就是在return之前就被调用,因为闭包在方法调用完成之后就会销毁,不会存在强引用,因此非逃逸闭包中不需要做weak self操作。
在swift3中去掉了@noescape,引入了@escaping,并给将所有的闭包默认作为非逃逸闭包。
public func myFunction(myHandler: @escaping () -> Void) {
print("this is my Function")
DispatchQueue.main.async {
myHandler()
}
}
【swift|swift @escaping】在上面的例子中,myHandler作为闭包传递到了主线程中执行,可以把主线程认为是一个异步的方法,因为方法执行完成之后可能闭包还没有执行,因此闭包myHandler可能逃出方法,如果不写@escaping,方法编译会通不过,报错如下:
文章图片
非逃逸闭包报错
推荐阅读
- Swift中willSet和didSet的简述
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- Swift|Swift ----viewController 中addChildViewController
- SwiftUI|SwiftUI iOS 瀑布流组件之仿CollectionView不规则图文混合(教程含源码)
- Swift高级应用|Swift高级应用 -01
- Swift5.0|Swift5.0 UITexview的基本使用
- Swift7|Swift7 - 循环、函数
- Swift学习笔记(三)Alamofire二次封装