在swift3.0以前,一个函数的参数的闭包的捕捉策略是escaping,如果是一个非逃逸闭包,需要显示的添加声明@noescape。
简单的声明就是,如果闭包是函数结束前被调用就是非逃逸的noescape,如果这个闭包实在函数执行完后才被调用,调用的地方超过了这个函数的范围就是逃逸的escaping
在swift3.0之后,所有闭包默认为非逃逸的,即不需要声明@noescape,如果是逃逸闭包则需要声明@escaping
例如:masonry的闭包是在函数执行完之前会被调用即非逃逸的闭包 @noescape(默认的、不用声明)
网络请求的闭包是在数据返回之后才会执行即是逃逸的闭包@escaping(需要声明)
闭包的逃逸
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代...
- 原文: Optional Non-Escaping Closures作者: Ole Begemann译者: kem...
- 前言 很多刚开始写Swift的同学或许已经把闭包应用在很多地方了,也总是会把闭包跟OC中的block划等号,的确S...