// Playground - noun: a place where people can play

import UIKit

// swift 中闭包与C和OC中的blocks比较相似
// 1. 利用上下文推断参数和返回值类型 2. 单表达式闭包可以省略return关键字 3. 参数名称简写 4. Trailing闭包语法
// 闭包表达式 in 表示 参数及返回值 已经表达完毕,后面是包体
/**
{(parmeters) -> return type in
statements
}
*/ var names = ["Anna", "Alex", "Ewa", "Barry", "Daniella"]
sorted(names, { (s1 : String, s2 : String) -> Bool in
return s1 > s2 // 单表达式闭包可以省略return关键字 此处的return可以省略
}) // 从上下文推断类型
// 当闭包作为参数方法参数使用时,因为方法内的参数已经有类型了(String, String) -> Bool ,swift可以从上下文推断出该闭包的参数与返回值,因此闭包的参数和返回值可以省略
sorted(names, { s1, s2 in
return s1 > s2
}) // 参数名简写 使用 $ + 数字 引用推断出的参数 0 表示第一个
sorted(names, {return $ > $}) // 这里官方文档说return可以省略,但是Xcode一直报错说有歧义 解决办法 {$0 as String > $1 as String} 明确声明$0 $1为String即可 // swift 中对于 string >方法表示接收2个String类型的参数,返回一个Bool值,刚好和闭包吻合,可以直接传入
sorted(names, >) // Trailing Cloures 使用情景:如果你使用了一个闭包作为一个方法的最后一个参数并且闭包很长
func someFunctionTakesCloures(cloures : () -> ()) {
println("do some thing")
} // 不使用trailing cloures调用
someFunctionTakesCloures({
// 这里实现闭包
}) // 使用trailing cloures
someFunctionTakesCloures() {
// 这里实现闭包
} // 如果闭包是该方法的唯一参数并且你使用了trailing cloures,调用方法时可以省略 ()
someFunctionTakesCloures {
// 这里实现闭包
} // 使用trailing cloures调用sorted方法
sorted(names) {return $ > $} // 捕获值
func makeInCrementor(forIncrement amount: Int) -> () -> Int {
var runningTotal =
func incrementor() -> Int {
runningTotal += amount
return runningTotal
}
return incrementor
}
// 方法 incrementor 没有参数,但是它可以从上下文中捕获变量使用

最新文章

  1. JavaScript中闭包之浅析解读
  2. JAVA Day10
  3. Android和Linux应用综合对比分析
  4. Redis 分布式session
  5. win10无法枚举容器中的对象 访问被拒绝
  6. 一行命令搞定VS2012无法安装cocos2d-x-2.1.4及创建跨平台项目(二)
  7. vijosP1543 极值问题
  8. BaseAdapter以及对ListView的优化(转)
  9. Oracle Where查询语句与排序语句
  10. 支持Angular 2的表格控件
  11. MCMC(一)蒙特卡罗方法
  12. ios控制器生存周期
  13. Linux下LCD 10分钟自动关屏的问题总结
  14. oracle drop table(表)数据恢复方法
  15. 解决将/etc/passwd文件中1000改为0后只能guest进入系统的问题 ||ubuntu下将普通用户权限升级为root用户权限的方法;
  16. vue引入外部.css文件,webpack将其与.vue中的样式混合打包了,怎么办?
  17. _net之美 记录笔记
  18. Java学习笔记43(打印流、IO流工具类简单介绍)
  19. 这个zsh超级棒
  20. HTTPS流程

热门文章

  1. sql2012简体中文版安装
  2. Core Data 删除某条指定记录的数据
  3. iOS 判断NSString是否包含某个字符串
  4. vue - webpack.base.conf.js
  5. iOS真机调试 for Xcode 5
  6. java 学习总结
  7. 排序(2)---------简单插入排序(C语言实现)
  8. windows下更换jdk运行当前jar包处理命令一则
  9. springmvc 数据回显功能
  10. IDEA部署Tomcat应用所有接口中文乱码