用户

func insert (_ region: @escaping Region) -> Region {
return { point in !region(point) }
}

当其中需要执行后才返回, 异步执行的,都需要添加escaping.

如方法1.
func doWork(block:()->() ) {
block()
}

调用时:
doWork{ print(“hello, world”)}

这种形式的闭包默认了一种假设, 就是参数中的block的方法会在doWork 返回前就完成。 即对于block的调用是同步行为。
而如果我们要把block中的方法放到一个dispatch中去, 让它在doWork返回后才去执行, 就需要在block类型前加上@escaping标识这个闭包是会逃逸出调用方法的。
方法2:
fun doWorkAsync( block: @escaping()->() ) {
DispatchQueue.main.async {
block()
}
}

对于上面两种情况下, 方法1中没有加escaping的方法, 由于block()闭包可以捕获其中的变量,没有逃逸形为的闭包,所以即使里面有调用self的情况,也完全不用担心持有的问题。
而对于方法2, 由于闭包的作用域可以超函数本身, 所以在这个闭包内部调用self及其成员的情况下, 需要强制写出self. 或者根据情况使用[weak self], 或者[unowned self]

swift escaping逃逸闭包用法相关推荐

  1. Swift中的逃逸闭包(@escaping )与非逃逸闭包(@noescaping)

    逃逸闭包 概念:一个接受闭包作为参数的函数,该闭包可能在函数返回后才被调用,也就是说这个闭包逃离了函数的作用域,这种闭包称为逃逸闭包.当你声明一个接受闭包作为形式参数的函数时,你可以在形式参数前写@e ...

  2. Swift : 逃逸闭包 和 @escaping 属性

    非逃逸闭包:调用者完成前闭包就被执行完成了. 逃逸闭包:调用函数完成了,但是闭包还没有被调用或者没有被完成. 例:所有网络请求的函数,在完成调用请求后,直到响应返回,闭包才会被调用,所以这个类型的网络 ...

  3. 逃逸闭包(@escaping)和非逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包 非逃逸闭包:当函数执行过程中,执行的函数内部的闭包,叫做非逃逸闭包 @noescape import UIKitclass ViewC ...

  4. Swift之常见闭包与defer关键字的使用分析和闭包中的循环引用 | CSDN创作打卡

    一.什么是闭包? 在 Swift 中,可以通过 func 定义一个函数,也可以通过闭包表达式定义一个函数,闭包是一个捕获了上下文的常量或者是变量的函数.闭包(Closures)是自包含的功能代码块,可 ...

  5. Swift--逃逸闭包与非逃逸闭包(Swift3.1)

    逃逸闭包和非逃逸闭包的理解: Swift中的闭包有两种:逃逸闭包和非逃逸闭包.逃逸闭包表示闭包将在函数返回之后执行:而非逃逸闭包则表示在函数返回前,即函数内部执行. 那么我们是否可以理解为:如果闭包作 ...

  6. swift 通知_Swift 闭包无脑加 [weak self] 行不行?

    用到 Swift 的闭包的时候,我们经常会加 [weak self]. 但你有没有问过自己,它是不是非加不可? 比如这个场景: class YourViewController {override f ...

  7. Swift-闭包,隐式返回、尾随闭包、值捕获、逃逸闭包、自动闭包

    闭包 闭包可以捕获和存储其所在上下文中任意常量和变量的引用,被称为包裹常量和变量. Swift 会为你管理在捕获过程中涉及到的所有内存操作. 全局和嵌套函数实际上也是特殊的闭包,闭包采用如下三种形式之 ...

  8. Swift @escaping 属性

    什么是逃逸闭包.它的定义非常简单而且易于理解.如果一个闭包被作为一个参数传递给一个函数,并且在函数return之后才被唤起执行,那么这个闭包是逃逸闭包.并且这个闭包的参数是可以"逃出&quo ...

  9. Swift @escaping @noescape

    在swift3.0之前,clouse默认时可以逃逸的.如果设置不可逃逸,使用@noescape修饰 在swift3.0之后,clouse默认时可以不逃逸的.如果设置可逃逸,使用@escaping修饰 ...

最新文章

  1. Linux 中 rsync 备份数据使用实例
  2. python安装django模块_python中安装django模块的方法
  3. get与post的区别与联系
  4. 谷歌浏览器怎么查看网页源代码 Chrome浏览器网页源代码查看技巧分享
  5. android 滚动列表框,建立滚动列表框
  6. 获取Oracle隐含參数信息
  7. 如何以最好的方式实现游戏关卡
  8. JQuery Tables 的应用(二)
  9. java 采集器_使用jsoup来写小说采集器
  10. php读取 Excel文件
  11. c语言 ipv4转ipv6,环境配置:Ipv6转Ipv4
  12. 微信nickname乱码 php,CSV中微信名字乱码 问题
  13. 多个文本对比相似度分析
  14. 常微分方程I ODE的例子3 生态学模型:Malthus增长模型、Lotka-Volterra模型
  15. 关于outlook签名图片大小的说明
  16. Linux面试最高频的5个基本问题
  17. 剑指Offer II --- 2021/9/2
  18. python重新加载文件_Python的重新加载知识点总结
  19. C中的strlen()函数说明,以及使用时要注意事项
  20. 麻省理工学院、南加大等美国名校的网络安全:勉强及格

热门文章

  1. IP地址,网络地址,主机地址,子网掩码关系
  2. C-doctest-测试框架
  3. 360数科港交所上市:市值超160亿港元 周鸿祎为大股东
  4. CorelDraw9 ,12,X3打开文件慢,复制慢,文件打开加速补丁
  5. 如何压缩png图片的大小?png图片怎么压缩?
  6. 基于javaEE健康系统的设计及开发
  7. java io 设备未就绪_java.io.IOException:设备未就绪
  8. tmpfs探索与虚拟机扩容
  9. ROS下调用笔记本和usb外接摄像头
  10. 云南计算机专修学院,云南城市建设职业学院五年制大专热门专业