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

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

相关文章

  • iOS微信支付开发案例

    iOS微信支付开发案例

    这篇文章主要为大家详细介绍了iOS微信支付开发案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • iOS 获取设备唯一标示符的方法详解

    iOS 获取设备唯一标示符的方法详解

    本篇文章主要介绍了iOS 获取设备唯一标示符的方法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • NSMutable 对象的坑解决分析

    NSMutable 对象的坑解决分析

    这篇文章主要为大家介绍了NSMutable 对象的坑解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 一个iOS上的秒表小应用的实现方法分享

    一个iOS上的秒表小应用的实现方法分享

    这篇文章主要介绍了一个iOS上的秒表小应用的实现方法分享,代码基于传统的Objective-C,需要的朋友可以参考下
    2015-10-10
  • iOS使用CIFilter生成二维码

    iOS使用CIFilter生成二维码

    这篇文章主要介绍了iOS使用CIFilter生成二维码,二维码的生成和读取只需要使用Core Image框架和AVFoundation框架就能轻松实现。在这里,我们主要介绍二维码的生成。有兴趣的可以了解一下
    2017-12-12
  • iOS实现从背景图中取色的代码

    iOS实现从背景图中取色的代码

    这篇文章主要介绍了iOS实现从背景图中取色的代码,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • iOS给密码进行加密的方法

    iOS给密码进行加密的方法

    这篇文章主要介绍了iOS给密码进行加密的方法,需要的朋友可以参考下
    2017-06-06
  • Mac OSX 打开原生自带读写NTFS功能(图文)

    Mac OSX 打开原生自带读写NTFS功能(图文)

    这篇文章主要介绍了Mac OSX 打开原生自带读写NTFS功能(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • iOS开发中使app获取本机通讯录的实现代码实例

    iOS开发中使app获取本机通讯录的实现代码实例

    这篇文章主要介绍了iOS开发中使app获取本机通讯录的实现代码实例,主要用到了AddressBook.framework和AddressBookUI.framework,代码基于传统的Objective-C,需要的朋友可以参考下
    2016-01-01
  • IOS开发仿微信右侧弹出视图实现

    IOS开发仿微信右侧弹出视图实现

    这篇文章主要介绍了IOS开发仿微信右侧弹出视图实现的相关资料,希望通过本文能帮助到大家,让大家实现这样类似的功能,需要的朋友可以参考下
    2017-10-10

最新评论