这篇文章主要介绍了iOS开发中Swift逃逸闭包的相关知识点以及需要注意的地方,需要的朋友收藏下吧。
逃逸闭包必须满足下面2个条件:
1、闭包作为一个参数传到函数中
2、闭包在函数返回之后才执行
需要在参数前面加入标注: @escaping,用来指明这个闭包是允许“逃逸”出这个函数的。
注意:将一个闭包标记为 @escaping 意味着你必须在闭包中显式地引用
import UIKit
/** 逃逸闭包满足下面2个条件:
* 1、handle闭包作为一个参数传到函数payRequest中
* 2、并且handle闭包在函数返回之后才执行
* 需要在参数前面加入标注: @escaping,用来指明这个闭包是允许“逃逸”出这个函数的
* 注意:将一个闭包标记为 @escaping 意味着你必须在闭包中显式地引用 self
*/
func payRequest(handle:@escaping (Data?, URLResponse? ,Error?) -> Void) {
let urlStr = URL(string: "http://www.baidu.com")
let session = URLSession(configuration: .default)
session.dataTask(with: urlStr!, completionHandler: handle)
}
func someFunctionWithNonescapingClosure(closure: () -> Void) {
closure()
}
class SomeClass {
var x = 10
func doSomething() {
payRequest { (data, resp, error) in
x = 100 // 此处编译错误,必须显式地引用 self
}
someFunctionWithNonescapingClosure { x = 200 }
}
}
在Swift标准库中,有很多这种类型的闭包,比如下面的异步请求的方法:
open func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask
open func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Swift.Void) -> URLSessionDataTask
都符合文章开头提到的逃逸闭包的形成条件。
本文标题为:iOS开发中Swift逃逸闭包知识
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- iOS 对当前webView进行截屏的方法 2023-03-01
- Flutter实现底部和顶部导航栏 2022-08-31
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- 详解flutter engine 那些没被释放的东西 2022-12-04
- Android实现监听音量的变化 2023-03-30
- Android studio实现动态背景页面 2023-05-23
- Android实现轮询的三种方式 2023-02-17
