Swift3.0通过闭包回调传递参数 / @escaping
//加载请求数据
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相关推荐
- swift3.0之闭包
Swift 相比原先的 Objective-C 最重要的优点之一,就是对函数式编程提供了更好的支持. Swift 提供了更多的语法和一些新特性来增强函数式编程的能力,本文就在这方面进行一些讨论. Sw ...
- swift3.0中@escaping 和 @noescape 的含义
第一次翻译,嘿嘿 What Do @escaping and @noescape Mean In Swift 3 开始用swift语言是很容易的,而且它确实是一门很吸引人的语言.但是随着你频繁的使用, ...
- angular路由传递参数_在angular4.0路由传递获取参数的最优方案
这次给大家带来在angular4.0路由传递获取参数的最优方案,在angular4.0路由传递获取参数的注意事项有哪些,下面就是实战案例,一起来看一下. 研究ng4的官网,终于找到了我想要的方法.我想 ...
- SHELL编程传递参数方法详解$# $* $0 $1 $2 $...
目录 实例 特殊字符用来处理参数: $* 与 $@ 区别: 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为: $n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行 ...
- KIS 旗舰版 VB6.0调用C#可执行程序,并传递参数
KIS 旗舰版 VB6.0调用C#可执行程序,并传递参数 调用C#可执行程序部分代码 Dim FID As StringDim FBillNo As StringDim CtlIndex As Int ...
- Swift3.0温习之基础篇
前言: 重新系统的温习一下swift3.0的东西,因为一两个月不用,有的东西就记得不是太清楚了.以下整理了一些基础的知识,如果哪里写的有问题,还请指出我马上做修改.后续还会有一些关于swift的文章会 ...
- Swift3.0语法1
(一)简介 (1)优于OC,快速,安全 (2)取消了预编译指令包括宏定义(OC用的太多了) (3)取消了OC指针和不安全访问的使用(看不到星星了) (4)全部点语法 (5)3.0中对Foundatio ...
- Swift3.0可选类型(Optional)倾心总结
本篇主要对Swift3.0版本的可选类型经常使用的场景及注意点加以总结,当做以后可以随时翻译的资料:因为本篇为自己编码时候的总结,难免会有遗漏,希望广大读者加以补充 Swift3.0 Optional ...
- this指向、数据双向流、传递参数、JSX中循环、React中样式、路由、引入资源的其它方式、create-react-app脚手架、事件处理、获取数据、UI框架推荐、pc桌面应用electronjs
改变this指向的几种方式: //1.使用箭头函数代替原始函数写法:getState=()=>{}//2.在函数调用时给函数名加bind(this)方法:(bind中第一个参数表示修改this指 ...
最新文章
- 【首创】完美解决scrollview与menu的兼容问题
- 【noi 2.6_2421】Exchange Rates(DP)
- 【Flink】Flink 任务实时监控
- 3G移动通信技术分析
- FRR BGP协议分析7 -- BGP 层3隧道 (1)
- KnockOutlook:针对Outlook的红队安全研究工具
- 【DIY贴片机】基于opencv识别定位电子元件
- 【日常技巧】Rufus安装原版win10教程(全流程)
- Blake2b算法 php,Blake2b算法是什么?Blake2b算法币种盘点
- Qt--探讨.exe程序加密
- 图形 1.3 纹理的秘密
- WebRTC APM
- 如何一键下载或保存微博里面的短视频?
- linux使用及shell常用命令技巧
- GPS定位为什么需要4颗以上卫星?
- THREE加载模型FBX、OBJ、GLTF
- svm算法java实现_谁有用JAVA实现机器学习svm算法的代码,感激不尽
- 今年大促季,阿里云容器服务有哪些技术和应用新突破?
- 缺点 霍夫圆_霍夫圆变换
- BUU刷题记-网鼎杯专栏2