//
// ViewController.swift
// 闭包的定义和使用
//
// Created by 思 彭 on 16/9/17.
// Copyright © 2016年 思 彭. All rights reserved.
// import UIKit class ViewController: UIViewController { override func viewDidLoad() {
super.viewDidLoad() // 1>. 最简单的闭包 ()->()没有参数,没有返回值的函数 如果没有参数,没有返回值,in可以省略
let b1 = { print("Hello SiSi")
}
// 执行闭包
b1() // 2. 带参数的闭包 参数,返回值,实现代码都是写在{}中
// {形参列表 - >返回值类型 // 实现代码}
// 使用 in 分割定义和实现 b2的类型: (Int) -> ()
let b2 = { (x: Int ) ->() in print(x)
}
// 执行闭包
b2() // 3.带参数/返回值的闭包
// (Int) -> Int
let b3 = {(y: Int) ->Int in return y +
}
// 闭包调用
print(b3()) // 4.异步执行任务,获取数据,通过block/闭包回调,闭包的应用场景和闭包一样
// 5.尾随闭包 如果函数的最后一个参数是闭包,函数的参数可以提前结束,最后一个参数直接使用{}包装闭包的代码
/*
loadData() { (result) in
print(result)
} */
loadData { (result) in
print(result)
}
// 按照函数的本身编写
loadData(completion: {(result) -> () in print(result)
})
} func demo1() { // 尾随闭包
DispatchQueue.global().async { // 嵌套的GCD xcode不会改成尾随闭包
DispatchQueue.main.async(execute: { })
}
// 尾随闭包
DispatchQueue.main.async { }
} func loadData(completion: (result: [String]) ->()) -> () { // 将任务添加到队列,执行任务的操作,队列的调度是以同步/异步执行任务
DispatchQueue.global().async{
print("耗时操作\(Thread .current())")
// 休眠
Thread.sleep(forTimeInterval: 1.0) // 获得数据
let json = ["头条","八卦","出大事了"]
//主线程更新
DispatchQueue.main.async(execute: {
print("主线程更新UI\(Thread.current())") // 回调,执行,通过参数回调
completion(result: json)
})
}
} // 1.使用变量记录函数 func demo() { let x:Int = sum(x: , y: )
print("sum = \(x)")
// 闭包: 提前准备好代码,需要的时候执行,可以当做参数传递 // 定义一个常量记录函数 (x: Int, y: Int) -> Int
let f = sum
// 在需要的时候执行 在OC是不能实现
print(f(x: , y: )) } func sum(x:Int,y: Int) -> Int { return x + y
} }

最新文章

  1. [Java] jackson注解
  2. 20145236 《Java程序设计》实验二实验报告
  3. C# App.config 自定义 配置节 报错“配置系统未能初始化” 解决方法
  4. messager(消息窗口)
  5. Freebsd 编译内核
  6. 使用VS时点右键卡住—不响应的问题
  7. 下拉列表(web),用jQuery实现
  8. MySQL 에서 root 암호 변경하기
  9. Linux Epoll介绍和程序实例
  10. #BeginLibraryItem 的疑问...
  11. 图的建立——邻接表表示(C语言+VC6.0平台)
  12. tomcat j2ee 目录结构
  13. 访问项目时,不能自动加载index.php文件
  14. application 从web.xml中获取初始化参数
  15. MinerConstanits.java 常量类
  16. Java公开课-04.异常
  17. JS数组reduce()方法详解及高级技巧
  18. 在java中,事务是什么?
  19. PHP删除当前目录及其目录下的所有文件
  20. Mybatis调用PostgreSQL存储过程实现数组入参传递

热门文章

  1. jsp+jstl实现登录验证
  2. windows——celery
  3. APPLICATION FAILED TO START 报错
  4. 【CUDA 基础】6.1 流和事件概述
  5. 【CUDA 基础】5.1 CUDA共享内存概述
  6. Python相关分析—一个金融场景的案例实操
  7. Nginx 499的问题
  8. tracert命令与tracert (IP地址)-d有什么区别?
  9. 9.Spring Cloud Config统一管理微服务配置
  10. Leetcode题目56.合并区间(中等)