Swift - 闭包的介绍及用法(以数组排序为例)
闭包(即一些小的匿名代码块),可以像函数一样使用。可以很方便的将闭包传给其他函数,告诉它们应当如何执行某一个任务。
|
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 - 闭包的介绍及用法(以数组排序为例)的更多相关文章
- Swift --闭包表达式与闭包(汇编分析)
在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数! 一.闭包表达式 概念 闭包表达式与定义函数的语法相对比,有区别如下: 去除了func 去除函数名 返回值类型添加了关键 ...
- Swift闭包概念与常见使用场景总结
·Swift 闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些 ...
- swift1.2语言函数和闭包函数介绍
swift1.2语言函数和闭包函数介绍 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护. swift1.2语言函 ...
- iOS开发Swift篇—简单介绍
iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...
- oc-12-NSString 类简单介绍及用法
// 11-[掌握]NSString 类简单介绍及用法 #import <Foundation/Foundation.h> int main(int argc, const char * ...
- iOS开发——Swift篇&Swift关键字详细介绍
Swift关键字详细介绍 每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词: 关键词: 用来声明的: “ class, deinit, enum, extension ...
- WorkFlow介绍及用法
WorkFlow介绍及用法 说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配 ...
- Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法 1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于 ...
- 学习swift从青铜到王者之swift闭包06
语法表达式 一般形式:{ (parameters) -> returnType in statements } 这里的参数(parameters),可以是in-out(输入输出参数),但不能设定 ...
随机推荐
- repeater一个简单的用法例子
(前台) <asp:Repeater ID="Repeater1" runat="server" onitemdatabound=" ...
- Trie树:应用于统计和排序
Trie树:应用于统计和排序 1. 什么是trie树 1.Trie树 (特例结构树) Trie树,又称单词查找树.字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构 ...
- UITableView 协议中常用的方法
UITableViewDataSource 协议中常用方法 1.设置右边 索引值 - ( NSArray *)sectionIndexTitlesForTableView:( UITableView ...
- asp.net mvc 下载文件 txt doc xsl 等等
不废话,直接上代码,就是这么简单 public FileStreamResult StreamFileFromDisk() { // string path = AppDomain.Current ...
- Linux DM9000网卡驱动程序完全分析
Linux DM9000网卡驱动程序完全分析http://blog.csdn.net/ypoflyer/article/details/6209922
- Python 函数基础、有序集合、文件操作(三)
一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...
- 根据Email地址跳转到相应的邮箱登录页面 (转)
//跳转到指定的邮箱登录页面 $(".btn_actemail").click(function () { var uurl = $(".hide_email" ...
- Week7(10月21日)
Part I:提问 =========================== 1.请为下图编写视图代码,视图中表单提交后,交给当前控制器和动作处理. 2.如何实现点击列标题排序功能? 3.分页时采用了 ...
- Week11(11月18日)
Part I:检查 =========================== 1.上堂课的练习效果. Part II:案例学习 =========================== MusicStor ...
- poj2947
高斯消元法模版题,但套模版没用.. 先回顾一下线性代数的知识. 若要求解如下方程: 首先,其系数矩阵为 然后,其增广矩阵为: 然后若要求解这个方程,首先将第一行第一个元素化为1,即:第一行乘以1/3. ...