iOS开发中Swift逃逸闭包知识

 更新时间:2018年02月11日 10:38:27   作者:sz_vcp2007  
这篇文章主要介绍了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

都符合文章开头提到的逃逸闭包的形成条件。

相关文章

  • iOS10 适配以及Xcode8配置总结

    iOS10 适配以及Xcode8配置总结

    这篇文章主要介绍了iOS10 适配以及Xcode8配置总结的相关资料,本文通过图文并茂的形式给大家介绍,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • iOS实现图片保存与搜索功能

    iOS实现图片保存与搜索功能

    这篇文章主要介绍了iOS实现图片保存与搜索功能的相关资料,需要的朋友可以参考下
    2016-02-02
  • iOS动画解析之支付宝支付打钩动画的实现方法

    iOS动画解析之支付宝支付打钩动画的实现方法

    支付宝支付打钩动画相信对大家来说都不陌生,这篇文章主要给大家介绍了关于iOS动画解析之支付宝支付动画的实现方法,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • IOS开发代码分享之设置UISearchBar的背景颜色

    IOS开发代码分享之设置UISearchBar的背景颜色

    在项目开发中,我们经常要用到UISearchBar,在网上看到了很多关于去除掉他背景色的方法,都已经失效了,今天来分享一个正常使用的方法,希望能帮到大家
    2014-09-09
  • IOS 贝塞尔曲线(UIBezierPath)属性、方法整理

    IOS 贝塞尔曲线(UIBezierPath)属性、方法整理

    这篇文章主要介绍了IOS 贝塞尔曲线(UIBezierPath)属性、方法的相关资料,这里整理了贝塞尔 曲线的基础资料,对属性及相应的方法一一做了详解,需要的朋友可以参考下
    2016-11-11
  • iOS 无卡顿同时使用圆角、阴影和边框的实现

    iOS 无卡顿同时使用圆角、阴影和边框的实现

    这篇文章主要介绍了iOS 无卡顿同时使用圆角、阴影和边框的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • iOS 10新的通知机制中添加图片的方法详解

    iOS 10新的通知机制中添加图片的方法详解

    这篇文章主要介绍了iOS 10新的通知机制中添加图片的方法,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • iOS 自定义返回按钮保留系统滑动返回功能

    iOS 自定义返回按钮保留系统滑动返回功能

    这篇文章主要介绍了iOS 自定义返回按钮,保留系统滑动返回功能,实现方法非常简单,具有参考借鉴价值,需要的朋友参考下吧
    2017-01-01
  • 详解iOS 轻松获取当前控制器的正确方式

    详解iOS 轻松获取当前控制器的正确方式

    这篇文章主要介绍了详解iOS 轻松获取当前控制器的正确方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 详解iOS 用于解决循环引用的block timer

    详解iOS 用于解决循环引用的block timer

    这篇文章主要介绍了详解iOS 用于解决循环引用的block timer,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论