-闭包的使用

提问:block 的应用场景是什么?

1. `网络(异步的)代码添加到队列,队列调度完成` -> 回调

无法通过返回值通知调用方

2. 回调的数值,是通过 block 的 `参数进行传递的`

1. Swift 中一般不需要使用 self.,但是 闭包中必须要使用

为什么?

- 正常的代码,当前 `上下文` 隶属于同一个对象,直接访问属性,是没有问题的

- 闭包是提前准备好的代码,在执行的时候,需要告诉函数访问哪一个对象的属性

- 因此,在闭包中必须要使用 self.

2. 建议:平时不要写 self.,如果 Xcode 提示,会注意到闭包

3. 解包

! - 强行解包

? - 可选解包

* 如果有值,返回 `可选值`

* 如果没有值,给 nil 发送后续的消息 `setFrame` -> 什么都不做!

 UIView.animateWithDuration(0.5, animations: { () -> Void inself.demoView?.frame = CGRect(x: 100, y: 100, width: 50, height: 50)}) { _ inprint("hehe")}}
// `尾`随闭包// 1. 闭包是最后一个参数// 2. 函数的 `) ` 可以前置到倒数第二个参数末尾// 3. 后面的参数直接使用 { // 执行代码 }// 4. 尾随闭包,不需要外部参数,用处,通常一个函数的末尾,如果添加了一个闭包参数,使用 尾随闭包就方便了!// 闭包的补充:如果没有参数/没有返回值, `in` 前面的所有内容都可以省略func tailDemo() {dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void inprint("hehe")}dispatch_async(dispatch_get_global_queue(0, 0), { () -> () inprint("xixi")})}
// 1. 参数 (text: String) -> (),接收 字符串,没有返回值的闭包// 提前准备好的代码,需要的时候调用func loadData(callback: (text: String)->()) {dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void inlet str = "html"dispatch_async(dispatch_get_main_queue(), { () -> Void in// 通过回调通知调用方,把异步请求结束的结果,通过参数,传递给闭包callback(text: str)})}
<pre name="code" class="objc">class ViewController: UIViewController {var demoView: UIView?override func viewDidLoad() {super.viewDidLoad()// 尾随闭包
//        loadData { (text) -> () in
//            print(text)
//        }// 函数方式调用
//        loadData({ text -> () in
//            print(text)
//        })loadData { text inprint(text)}
 // 动画演示let v = UIView(frame: CGRect(x: 20, y: 20, width: 100, height: 100))v.backgroundColor = UIColor.redColor()view.addSubview(v)demoView = v
//        tailDemo()}override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
//        UIView.animateWithDuration(0.5) { () -> Void in
//            self.demoView?.frame = CGRect(x: 100, y: 100, width: 50, height: 50)
//        }
//        UIView.animateWithDuration(0.5, animations: { () -> Void in
//            self.demoView?.frame = CGRect(x: 100, y: 100, width: 50, height: 50)
//            }) { (_) -> Void in
//                print("hehe")
//        }

Swift 闭包的使用(尾随闭包)相关推荐

  1. Swift学习(八):闭包(闭包表达式,尾随闭包,闭包的定义,自动闭包)

    闭包表达式(Closure Expression) 可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 func函数 闭包定义函数 闭包表达式调用可以直接省略参数名 闭包定义函数也可以写为 ...

  2. swift那些事儿 尾随闭包

    尾随闭包:一个无名函数(闭包)作为一个参数传给一个正常的函数 func methondName(参数1: String, 参数2: String, 闭包closure: (closure的参数1,cl ...

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

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

  4. 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)

    很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或 block了,而叫闭包(closure).下面配合代码来理解一下swi ...

  5. SwiftUI——trailing closure syntax(尾随闭包)

    尾随闭包是闭包的一种简写方式. 当一个闭包作为另一个函数的最后一个参数时,可以使用尾随闭包.换言之,把闭包作为函数的最后一个参数时,可以使用尾随闭包,比较方便. 当我们调用一个外部函数,而且只有一个参 ...

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

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

  7. Go 学习笔记(18)— 函数(04)[闭包定义、闭包修改变量、闭包记忆效应、闭包实现生成器、闭包复制原对象指针]

    1. 闭包定义 Go 语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说: 函数 + ...

  8. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )

    文章目录 一.闭包类 Closure 简介 二. 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 三. 完整代码示例 一.闭包类 Closure ...

  9. 【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )

    文章目录 一.自定义闭包参数列表 1.定义一个自定义参数的闭包 2.定义多个自定义参数的闭包 3.为闭包参数指定默认值 二.完整代码示例 一.自定义闭包参数列表 如果要向 闭包 中 , 传递多个参数 ...

最新文章

  1. php缓存数据到本地缓存,本地缓存localStorage的使用方法
  2. linux共享磁盘给指定ip,Linux 磁盘挂载和mount共享
  3. 开发日记-20190723 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 13
  4. ubuntu设置鼠标单击打开文件夹或者文件
  5. JavaScript学习总结(一)——ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)...
  6. 监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
  7. BugkuCTF-MISC题多方法解决
  8. VSCode 如何支持 Flow
  9. Docker Swarm的前世今生
  10. 日常生活中的思维导图:一本书让你了解思维导图MindManager
  11. 为什么登录MySQL会闪退_MySql登录时闪退的快速解决办法
  12. 论文记载:A Survey on Traffic Signal Control Methods
  13. 收藏个网站招聘内容。
  14. 基于linux 的 PCI PCIe 总线分析总结
  15. angular8.x + ngx-translate实现国际化
  16. springboot篇】二十一. 基于springboot电商项目 十二 订单服务
  17. IE下载时中文文件名乱码解决
  18. BF算法(Java实现)
  19. ERROR: 报错分析 phase.raise_objection(this)不能是phase.raise_objection(phase)
  20. Ubuntu 22.04 x86_64 OVF (sysin)

热门文章

  1. 爪哇java怎么读_Javan[贾万,贾范,爪哇]英文名的中文翻译意思、发音、来源及流行趋势-千代英文名...
  2. 7d聚拉提的功效和原理,做完7d聚拉提三天后脸变大是怎么回事
  3. Dundas控件绘图
  4. Dreamweaver cc等各个版本系统要求(最低配置要求)
  5. 网页的视频聊天室开发
  6. Centos7 服务器上phantomjs自启动问题
  7. 51单片机烟雾报警器mq2烟雾报警ADC0832采集实践制作DIY- GC0026-烟雾报警器
  8. VisionMobile:2012年移动开发者经济报告(一):关键内容
  9. 中国安全技术防范行业协会资质科普:什么是安防资质?要怎么通过资质申请?
  10. Listary搜索工具