//加载请求数据
func loadData(completion: @escaping (_ result:[String]) -> ()) -> () {DispatchQueue.global().async {print("耗时操作 \(Thread.current)")//获取到的json结果数据let json = ["姓名","年龄","爱好"]//主队列回调DispatchQueue.main.async {print("主线程更新 UI \(Thread.current)")//回调异步获取的结果completion(json)}}
}
//调用:
//尾随闭包,
//如果函数的最后一个参数是闭包,函数参数可以提前结束,最后一个参数直接使用{},包装闭包的代码
loadData { (result) inprint("获取结果 \(result)")
}//按照函数本身的格式编写
loadData(completion: { (result) -> () inprint("获取结果 \(result)")
})

注意到在loadData函数有通过智能提示出现了一个@escaping的关键词,@escaping(逃逸闭包):如果一个闭包被作为一个参数传递给一个函数,并且在函数return之后才被唤起执行,那么这个闭包是逃逸闭包.并且这个闭包的参数是可以“逃出”这个函数体外的.

在swift2中,可以标记一个函数参数@noescape属性,来告诉编译器传递给这个函数的闭包不允许“逃逸”出函数体外.但是在在swift3.0中,@noescape已经被移除了.引入了@escaping.

创建默认不可逃逸闭包的好处:最明显的好处就是编译器优化你的代码的性能和能力.如果编译器知道这个闭包是不可逃逸的,它可以关注内存管理的关键细节.

而且可以在不可逃逸闭包里放心的使用self关键字,因为这个闭包总是在函数return之前执行,你不需要去使用一个弱引用去引用self.

Swift3.0通过闭包回调传递参数 / @escaping相关推荐

  1. swift3.0之闭包

    Swift 相比原先的 Objective-C 最重要的优点之一,就是对函数式编程提供了更好的支持. Swift 提供了更多的语法和一些新特性来增强函数式编程的能力,本文就在这方面进行一些讨论. Sw ...

  2. swift3.0中@escaping 和 @noescape 的含义

    第一次翻译,嘿嘿 What Do @escaping and @noescape Mean In Swift 3 开始用swift语言是很容易的,而且它确实是一门很吸引人的语言.但是随着你频繁的使用, ...

  3. angular路由传递参数_在angular4.0路由传递获取参数的最优方案

    这次给大家带来在angular4.0路由传递获取参数的最优方案,在angular4.0路由传递获取参数的注意事项有哪些,下面就是实战案例,一起来看一下. 研究ng4的官网,终于找到了我想要的方法.我想 ...

  4. SHELL编程传递参数方法详解$# $* $0 $1 $2 $...

    目录 实例 特殊字符用来处理参数: $* 与 $@ 区别: 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行 ...

  5. KIS 旗舰版 VB6.0调用C#可执行程序,并传递参数

    KIS 旗舰版 VB6.0调用C#可执行程序,并传递参数 调用C#可执行程序部分代码 Dim FID As StringDim FBillNo As StringDim CtlIndex As Int ...

  6. Swift3.0温习之基础篇

    前言: 重新系统的温习一下swift3.0的东西,因为一两个月不用,有的东西就记得不是太清楚了.以下整理了一些基础的知识,如果哪里写的有问题,还请指出我马上做修改.后续还会有一些关于swift的文章会 ...

  7. Swift3.0语法1

    (一)简介 (1)优于OC,快速,安全 (2)取消了预编译指令包括宏定义(OC用的太多了) (3)取消了OC指针和不安全访问的使用(看不到星星了) (4)全部点语法 (5)3.0中对Foundatio ...

  8. Swift3.0可选类型(Optional)倾心总结

    本篇主要对Swift3.0版本的可选类型经常使用的场景及注意点加以总结,当做以后可以随时翻译的资料:因为本篇为自己编码时候的总结,难免会有遗漏,希望广大读者加以补充 Swift3.0 Optional ...

  9. this指向、数据双向流、传递参数、JSX中循环、React中样式、路由、引入资源的其它方式、create-react-app脚手架、事件处理、获取数据、UI框架推荐、pc桌面应用electronjs

    改变this指向的几种方式: //1.使用箭头函数代替原始函数写法:getState=()=>{}//2.在函数调用时给函数名加bind(this)方法:(bind中第一个参数表示修改this指 ...

最新文章

  1. 【首创】完美解决scrollview与menu的兼容问题
  2. 【noi 2.6_2421】Exchange Rates(DP)
  3. 【Flink】Flink 任务实时监控
  4. 3G移动通信技术分析
  5. FRR BGP协议分析7 -- BGP 层3隧道 (1)
  6. KnockOutlook:针对Outlook的红队安全研究工具
  7. 【DIY贴片机】基于opencv识别定位电子元件
  8. 【日常技巧】Rufus安装原版win10教程(全流程)
  9. Blake2b算法 php,Blake2b算法是什么?Blake2b算法币种盘点
  10. Qt--探讨.exe程序加密
  11. 图形 1.3 纹理的秘密
  12. WebRTC APM
  13. 如何一键下载或保存微博里面的短视频?
  14. linux使用及shell常用命令技巧
  15. GPS定位为什么需要4颗以上卫星?
  16. THREE加载模型FBX、OBJ、GLTF
  17. svm算法java实现_谁有用JAVA实现机器学习svm算法的代码,感激不尽
  18. 今年大促季,阿里云容器服务有哪些技术和应用新突破?
  19. 缺点 霍夫圆_霍夫圆变换
  20. BUU刷题记-网鼎杯专栏2

热门文章

  1. 经典算法——单链表反转的递归方法和非递归方法
  2. 十.控制文件指针移动,文本的修改
  3. 从BGA焊盘中间出线方法
  4. ARM 汇编指令对应的机器码和条件码
  5. 山东大学软件学院2021-6 《区块链》期末考试_孔老师_fromLWT_区块链期末考试题目回忆
  6. MiniUI官方表单验证示例
  7. 爬虫课程笔记(二)Requests、代理、cookie和session
  8. 【笑话】电影穿帮镜头
  9. python爬取豆瓣电影榜单
  10. [BZOJ3572] [Hnoi2014]世界树