什么是Swift中的转义闭包的好例子?

我正在阅读 Swift编程语言手册,它提到了一个逃避关闭.关于转义闭包,我不知道它们的意思是“闭包作为参数传递给函数,但在函数返回后调用.”有人可以提供一个逃避闭包的例子吗?

解决方法

转义闭包的一个示例是某些异步任务中的完成处理程序,例如启动网络请求:

func performRequest(parameters: [String: String],completionHandler: (NSData?,NSError?) -> ()) {
    let request = NSMutableuRLRequest(URL: url)
    request.HTTPMethod = "POST"
    request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters,options: [])
    request.setValue("application/json",forHTTPHeaderField: "Content-Type")

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data,response,error in
        completionHandler(data,error)
    }
    task.resume()
}

这就是这样称呼的:

performRequest(["foo" : "bar"]) { data,error in
    guard error == nil else {
        print(error)
        return
    }

    // Now use data here
}

// Note: The `completionHandler` above runs asynchronously,so we
// get here before the closure is called,so don't try to do anything
// here with `data` or `error`. Any processing of those two variables
// must be put _inside_ the closure above.

这个completionHandler闭包被认为是转义,因为NSURLSession方法dataTaskWithRequest是异步运行的(即它立即返回,并且在请求完成后稍后将调用它自己的闭包).

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...