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(输入输出参数),但不能设定 ...
随机推荐
- 转:STL容器里存放对象还是指针
一.问题的引出: 容器可以存放对象,可以存放指针,这里要谈的是两者的使用问题.就是什么时候存放对象更好,什么时候存放指针更好? 二.问题的分析过程: 1. 首先说下stl容器的工作方式 对于内建类 ...
- wiki oi 3115高精度练习之减法
题目描述 Description 给出两个正整数A和B,计算A-B的值.保证A和B的位数不超过500位. 输入描述 Input Description 读入两个用空格隔开的正整数 输出描述 Outpu ...
- (Java随机数举例)随机扔一千次硬币的正反次数
方法一: public class coin{ public static void main(String args[]){ int n = 0; int m = 0; int len = 1000 ...
- python 的经常使用时间操作,取得当前时间等
我们先导入必须用到的一个module>>> import time设置一个时间的格式,以下会用到>>>ISOTIMEFORMAT=’%Y-%m-%d %X’看一下当 ...
- leetcode_question_62 Unique Paths
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- Eclipse中设置tomcat的启动内存
现象:眼下每次使用Eclipse启动Tomcat 的时候常常出现OutOfMemoryError thrown from the UncaughtExceptionHandler in thread ...
- [Swust OJ 781]--牛喝水
Time limit(ms): 1000 Memory limit(kb): 65535 The cows have a line of 20 water bowls from which the ...
- 【转】管理员必备的Linux系统监控工具
原文连接: 管理员必备的Linux系统监控工具 #1: top - 进程活动 top提供一个当前运行系统实时动态的视图,也就是正在运行进程.在默认情况下,显示系统中CPU使用率最高的任务,并每5秒钟刷 ...
- 关于PsCreateSystemThread函数
研究了1天这个...MSDN说的不是很清楚NTSTATUS PsCreateSystemThread( _Out_ PHANDLE ThreadHandle, _In_ UL ...
- methanol 模块化的可定制的网页爬虫软件,主要的优点是速度快。
methanol模块化的可定制的网页爬虫软件,主要的优点是速度快. 下载:http://sourceforge.net/projects/methabot/?source=typ_redirect R ...