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(输入输出参数),但不能设定 ...
随机推荐
- @RequestParam
@MVC另外一个特性是其提取和解析请求参数的能力.让我们继续重构上面的方法,并在其中添加@RequestParam注解: @RequestMapping("/accounts/show&qu ...
- JAVA用JNI方法调用C代码实现HelloWorld
一.首先是java运行环境的搭建,到官网下载java jdk安装即可(注意要修改环境变量).还可以顺便安装eclipse. 二.编写java代码,文件名HelloWorld.java public c ...
- STL set的用法
要使用set需要事先引入一个头文件 #include<set> set是一个不允许重复的集合,如果要重复可以使用multiset. 1.set的插入[set.insert();],会返回P ...
- (收藏)KMP算法的前缀next数组最通俗的解释
我们在一个母字符串中查找一个子字符串有很多方法.KMP是一种最常见的改进算法,它可以在匹配过程中失配的情况下,有效地多往后面跳几个字符,加快匹配速度. 当然我们可以看到这个算法针对的是子串有对称属性, ...
- ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
- 数学之路(3)-机器学习(3)-机器学习算法-SVM[9]
我们应用SVM的非线性分类功能对手写数字进行识别,我们在这应用poly做为非线性核 svm = mlpy.LibSvm(svm_type='c_svc', kernel_type='poly',gam ...
- Android 一个绚丽的loading动效分析与实现!
http://blog.csdn.net/tianjian4592/article/details/44538605 前两天我们这边的头儿给我说,有个 gif 动效很不错,可以考虑用来做项目里的loa ...
- window下如何搭建linux环境
1.使用虚拟机 使用VMware虚拟机,下载linux内核系统,加载运行. 2.cygwin 安装cygwin,设置环境变量. 第二种方法还是比较简便的.优先考虑.
- [转]Java Code Examples for android.util.JsonReader
[转]Java Code Examples for android.util.JsonReader The following are top voted examples for showing h ...
- 基于visual Studio2013解决C语言竞赛题之0513字符拷贝
题目 解决代码及点评 /************************************************************************/ /* 13. 将字符数 ...