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

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

Swift - 闭包的介绍及用法(以数组排序为例)的更多相关文章

  1. Swift --闭包表达式与闭包(汇编分析)

    在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数! 一.闭包表达式 概念 闭包表达式与定义函数的语法相对比,有区别如下: 去除了func 去除函数名 返回值类型添加了关键 ...

  2. Swift闭包概念与常见使用场景总结

    ·Swift 闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些 ...

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

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

  4. iOS开发Swift篇—简单介绍

    iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...

  5. oc-12-NSString 类简单介绍及用法

    // 11-[掌握]NSString 类简单介绍及用法 #import <Foundation/Foundation.h> int main(int argc, const char * ...

  6. iOS开发——Swift篇&Swift关键字详细介绍

    Swift关键字详细介绍 每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词: 关键词: 用来声明的: “ class, deinit, enum, extension ...

  7. WorkFlow介绍及用法

    WorkFlow介绍及用法 说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配 ...

  8. Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

    Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法 1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于 ...

  9. 学习swift从青铜到王者之swift闭包06

    语法表达式 一般形式:{ (parameters) -> returnType in statements } 这里的参数(parameters),可以是in-out(输入输出参数),但不能设定 ...

随机推荐

  1. 【Android】: 部分注意事项

    1.用来触发BroadcastReceive的Intent和启动Activity或Service的Intent是不兼容的. 2.当文件名做为ContentProvider查询的一部分返回的时候,不应该 ...

  2. 绫致时装讲述O2O细节:野心在“私人定制” - 移动购物 - 亿邦动力网

    绫致时装讲述O2O细节:野心在"私人定制" - 移动购物 - 亿邦动力网 绫致时装讲述O2O细节:野心在"私人定制" 作者: 亿邦动力网来源: 亿邦动力网201 ...

  3. django在视图中使用模板

    在视图中使用模板   在学习了模板系统的基础之后,现在让我们使用相关知识来创建视图. 重新打开我们在前一章在 mysite.views 中创建的 current_datetime 视图. 以下是其内容 ...

  4. source code of MES Data

    <HTML> <HEAD> <TITLE>TELOGS</TITLE> </HEAD> <BODY> <?php /* c ...

  5. Swift编程语言学习2.1——基础运营商(在)

    操作员正在检查,更改.归并值特殊符号或短语.例如,加+这两个数字相加(例如let i = 1 + 2). 算如更复杂的逻辑和操作的实施&&(例如if enteredDoorCode & ...

  6. iOS Responder Chain 响应者链

    一.事件分类 对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕.晃动设备.通过遥控设施控制设备.对应的事件类型有以下三种: 1.触屏事件(Touch Event) 2.运动事件(Moti ...

  7. 素数环(C - 暴力求解)

    素数环(暴力)(紫书194页) Description   A ring is composed of n (even number) circles as shown in diagram. Put ...

  8. OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线

    上一篇 OpenGL ES 正反面设置指令 中分析了正反面的判区方法,那么正反面有什么用呢?接下来我们就要引入一个叫做背面消除的概念.在3dmax中有个选项,当你用挤压修改器挤出一个中空的长方体时,在 ...

  9. Delphi语言最好的JSON代码库 mORMot学习笔记1

    mORMot没有控件安装,直接添加到lib路径,工程中直接添加syncommons,syndb等到uses里 --------------------------------------------- ...

  10. zk create() 方法

    create() $path = $zkh->create($req_path, $data); $path = $zkh->create($req_path, $data, 'flags ...