闭包(即一些小的匿名代码块),可以像函数一样使用。可以很方便的将闭包传给其他函数,告诉它们应当如何执行某一个任务。

1,使用sort方法和闭包进行数组排序
sort方法返回一个数组的有序版本。(sort方法即为Swift2.0之前的sorted方法。而原来的sort方法改名为sortInPlace,用来将原数组修改成有序版本)
1
2
3
4
5
6
7
8
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort({ (n1: Int, n2: Int) -> Bool in
    //进行从小到大的排序
    return n2 > n1
})
print(numbersSorted) //[1, 12, 25, 27, 35]

2,闭包可以不用指定参数类型,编译器会帮我们推断的

1
2
3
4
5
6
7
8
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort({ n1, n2 in
    //进行从小到大的排序
    return n2 > n1
})
print(numbersSorted) //[1, 12, 25, 27, 35]

3,还可以省略参数名,直接根据数字来引用每个参数($0,$1,$2......)

1
2
3
4
5
6
7
8
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort({
    //进行从小到大的排序
    return $1 > $0
})
print(numbersSorted) //[1, 12, 25, 27, 35]

4,如果闭包只包含一行代码,可以省略return关键字

1
2
3
4
5
6
7
8
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort({
    //进行从小到大的排序
    $1 > $0
})
print(numbersSorted) //[1, 12, 25, 27, 35]

5,如果一个闭包是函数调用的最后一个参数,可以将它放在括号外面。提高可读性。

1
2
3
4
5
6
7
let numbers = [12,25,1,35,27]
let numbersSorted = numbers.sort(){
    //进行从小到大的排序
    $1 > $0
}
print(numbersSorted) //[1, 12, 25, 27, 35]

6,这个换行也是可选的,所以代码可再次精简

1
let numbersSorted = numbers.sort(){ $1 > $0 }

7,闭包也可以存储在变量中,像调用函数一样调用它们

1
2
let comparator = {(a: Int, b: Int) in a < b}
comparator(2,5) //true

转载于:https://www.cnblogs.com/Free-Thinker/p/4844227.html

Swift - 闭包的介绍及用法(以数组排序为例)相关推荐

  1. 闭包的介绍、构成条件、作用及示例代码

    1. 闭包的介绍 我们学过了函数,我们知道当函数调用完,函数内定义的变量都销毁了,但是我们有时候需要保存函数内的这个变量,每次在这个变量的基础上完成一些列的操作,比如: 每次在这个变量的基础上和其它数 ...

  2. swift1.2语言函数和闭包函数介绍

    swift1.2语言函数和闭包函数介绍 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护. swift1.2语言函 ...

  3. Java 动态代理介绍及用法

    Java 动态代理介绍及用法 一,静态代理模式的特点 在之前的文章中 java代理模式 已经介绍里java里的(静态)代理模式 下面是上文静态代理类的例子: public class ProxyBea ...

  4. swift自行车品牌介绍_品牌101:简介

    swift自行车品牌介绍 Sometimes when I'm around designer friends and there's a lull in the conversation one o ...

  5. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  6. chrome介绍与用法

    chrome介绍与用法 chrome介绍与用法 1. 认识devTools Elements 面板 console控制面板 Sources 资源面板 chrome介绍与用法 1. 认识devTools ...

  7. Python闭包基本介绍与作用

    目录 1.闭包基本介绍 1.1 外函数的返回值是内函数的引用 1.2 外函数把临时变量绑定给内函数 1.3 闭包中内函数修改外函数局部变量 2.闭包的作用 1.闭包基本介绍 "闭包" ...

  8. at指令 meid_AT指令介绍及用法,AT 指令集合

    AT指令介绍及用法,AT 指令集合 AT指令在当代手机通讯中起着重要的作用,能够通过AT指令控制手机的许多行为,包括拨叫号码.按键控制.传真.GPRS等.西门子M55手机为我提供了很多的AT指令,网络 ...

  9. C#中File和FileStream的简单介绍和用法

    前言 在近期的工作过程中发现自己的基础比较薄弱,所以最近在恶补基础知识.下面就对我所学习的File类和FileStream进行简单的总结. 1.首先先介绍File类和FileStream文件流 1.1 ...

最新文章

  1. mybatis的一些基础问题
  2. 擦地机器人修理_不要智障机器人,擦地机器人就选iRobot,干湿两擦用了就知道...
  3. 关于服务器端控件的attributes属性的奇怪问题
  4. opencore0.6.3_大杨随笔2020.11.3
  5. 微信JS-SDK开发:扫一扫接口功能实现
  6. 出错处理函数abort、exit、atexit、strerror
  7. 子集生成 --二进制法
  8. Junit4中Test Suite的用法
  9. 常用的前端跨域的几种方式
  10. 【华为云技术分享】“敏捷+ DevOps”先行,效能提升助推企业升级
  11. 【转】ASP.net MVC自定义错误处理页面的方法
  12. python语言-Python语言的一些基本常用语句
  13. Multisim10.0.1汉化时没有stringfiles问题
  14. 写刀路的一些经验[分享] 铜公加工方法及注意事项
  15. 理论力学知识要点(五)
  16. Spring底层原理问题
  17. 《我是一只小小鸟》读后感
  18. oracle导出自增设置,教程方法;oracle中如何设置自增主键电脑技巧-琪琪词资源网...
  19. 近红外 中红外 远红外
  20. <转载>Presto对接华为HDFS 3.X,Unrecognized Hadoop major version number解决方案

热门文章

  1. python项目中无法import不同文件的代码
  2. 西安网络推广教大家如何正确解决处理网站死链
  3. matlab sol函数,sol=bvp4c(@f,@fsbc,solinit)解决有上下限的ODE函数
  4. 变频电机转矩频率特性曲线_伟创变频器
  5. java编程50实例_java编程实例大全及详解谜底(50例).doc
  6. java jackson json_java – 使用Jackson从JSON获取单个字段
  7. python实现火车票查询工具_Python 实现一个火车票查询的工具
  8. jq选中单选框后文本框不可编辑_打开速度最快最强大的PDF免费工具,编辑+阅读功能一体...
  9. (转载)linux下输入输出重定向和管道符
  10. 使用GAN进行异常检测——可以进行网络流量的自学习哇,哥哥,人家是半监督,无监督的话,还是要VAE,SAE。...