目录

1.闭包的表达式

2.根据上下文推断类型

3.单表达式隐式返回

4.简写参数名称

5.运算符方法

6.尾随闭包

7.总结


Swift编程里面的闭包(Closure),是自包含的函数代码块,可以在代码中被传递和引用,可以捕获和存储所在上下文中任意的常量和变量的引用,被称为包裹常量和变量。

1.闭包的表达式

{ (parameters) -> return type instatements
}

以系统的sorted函数举例,sorted(by:)

var names = ["a张三","c李四","b小米"]
//定义一个闭包函数
func JPmethod(_ s1:String,_ s2:String) -> Bool{return s1 > s2
}
var results = names.sorted(by:JPmethod)//传入函数名称
print(results)

sorted函数的参数就是一个闭包,如上面就是定义了一个闭包,然后再传入,不直接定义闭包的话,可以直接在参数里面写闭包也是可以的

var names = ["a张三","c李四","b小米"]
var results = names.sorted(by: {(_ s1:String,_ s2:String) -> Bool inreturn s1 > s2
})
print(results)

2.根据上下文推断类型

闭包作为参数传递给方法,Swift可以推断出它的参数类型以及它返回的值的类型,这意味着不需要将类型作为闭包表达式定义的一部分来编写。因为可以推断出所有类型,所以也可以省略返回箭头(->)和参数名称周围的括号:

//根据上下文推断类型
var results1 = names.sorted(by: {s1,s2 inreturn s1 > s2
})

3.单表达式隐式返回

单表达式闭包可以省略return关键字来隐式返回单个表达式的结果

var results1 = names.sorted(by: {(s1,s2) ins1 > s2
})

4.简写参数名称

Swift自动提供内联闭包速记参数名,它可以使用的名称,指的是闭包的参数值1,$2,等等。

在闭包表达式中使用这些简写参数名称,则可以从其定义中省略闭包的参数列表,并且将从期望的函数类型推断缩写参数名称的数量和类型。in关键字也可以被省略

var results1 = names.sorted(by: {$0 > $1
})

5.运算符方法

var results1 = names.sorted(by: >)

6.尾随闭包

如果需要将一个很长的表达式最为最后一个参数传递给函数,可以使用尾随闭包来增强函数的可读性

func jpClosure(closure:()->Void){//函数体部门
}
//不使用尾随闭包进行函数调用
jpClosure(closure:{//闭包体部分
})
//使用尾随闭包进行函数调用
jpClosure(){
}

如果提供闭包表达式作为函数或方法的唯一参数,并且将该表达式作为尾随闭包提供,则在调用函数时,不需要在函数或方法的名称后面写一对括号():

var results1 = names.sorted(by: {$0 > $1
})

7.总结

闭包Closure表达式是一种未命名的闭包,用轻量级语法编写,可以从上下文中捕获值。

Swift的闭包表达式具有干净,清晰的风格,闭包的优势包括:

  • 从上下文中推断参数和返回值类型
  • 单表达式闭包的隐式返回
  • 速记参数名称
  • 尾随闭包语法

Swift编程-闭包Closure相关推荐

  1. python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)

    1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...

  2. Scala编程之闭包(closure)

    一.概念 闭包:我们把一个函数与其相关引用环境(变量)组合成一个整体叫做闭包 概念晦涩难懂,下面我们用一个例子说明 二.小例子 def minusxy(x:Int) = (y:Int)=>x-y ...

  3. Swift编程的15个技巧

    自2014年9月1.0版发布后,Savvy的应用开发团队就开始在iOS项目中实验并使用Swift.不过由于Swift相对还很新,当时大多项目仍在使用Objective-C:自从2015年9月Swift ...

  4. swift_016(Swift 的闭包)

    //***********swift学习之16--闭包--*************************** /*   闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者 ...

  5. Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记

    Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...

  6. 【Python】闭包Closure

    原来这就是闭包啊... 还是上次面试,被问只不知掉js里面的闭包 闭包,没听过啊...什么是闭包 回来查了下,原来这货叫闭包啊...... ------------------------------ ...

  7. Swift学习笔记笔记(一)Swift编程步骤数据类型

    一.实验目的: 掌握Swift编程方法. 掌握Swift数据类型. 二.实验原理: playground的界面与使用方法. 常量与变量的定义方法. 3.常量与变量的类型声明方法. 三.实验步骤及内容: ...

  8. python代码:闭包closure的一个例子

    python代码:闭包closure的一个例子 #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author: @file: ...

  9. naarray查询 swift_从入门到精通Swift编程(完整 未加密 小码哥) [16.3G]

    目录:/从入门到精通Swift编程(完整 未加密 小码哥) [16.3G] : U! s1 a8 i- s+ O, c7 i      ┣━━01-基础语法.汇编初探 [367.2M]# D% l* ...

  10. 《Swift编程入门经典》

    2019独角兽企业重金招聘Python工程师标准>>> <Swift编程入门经典> 有趣.快速地构建iOS和OS X应用,Swift是苹果公司用于iOS和OS X开发的新 ...

最新文章

  1. Android如何实现简单音乐播放器的代码
  2. 字符串匹配的Boyer-Moore算法
  3. 可以直接考甲级吗_函授本科可以考四级吗
  4. Android 安全机制概述
  5. 爬虫python 新闻,Python爬虫实例--爬取人民网新闻
  6. java 蓝桥杯算法训练 数组查找及替换
  7. python必背100源代码-学会这个Python库,至少能减少100行代码
  8. iOS开发UI篇—Button基础
  9. 细谈Axios中那些不为人知的秘密!一文读懂Axios
  10. 电脑ndows无法启动,电脑无法启动windows帮助和支持为什么?
  11. 简单抽样技术——样本均值是总体均值的无偏估计
  12. 电脑自带的cmd/Powershell连接远程服务器(实用技巧)
  13. 8.微信小程序-Mobx数据共享(类似vuex)
  14. Set集合的概述及特点
  15. 新学期,我的目标与展望。(中秋快乐)
  16. A4. MTK开机流程
  17. 安卓开发 之小白养成-Android适配
  18. 指南针的实现代码两种方法,怎么用
  19. 利用JS中的循环语句来实现正方形、长方形、平行四边形、三角形、菱形、空心菱形。
  20. 接口技术课程设计——一种基于MFC构造自动测量系统

热门文章

  1. Web终端SSH功能
  2. Python操作SQLAlchemy
  3. Party (Standard IO)
  4. 帮公司人事MM做了个工资条拆分工具
  5. 编译器错误信息:CS0016:未能写入输出文件 c:\WINDOWS\Microsoft.NET\Framework\...的解决办法...
  6. Windows mobile美化之-短信界面美化修改~
  7. 使用dime传输大附件的设置(WSE Soap toolkit)
  8. MySQL SQL error: #1271 - Illegal mix of collations for operation 'UNION'
  9. 再谈new functionName
  10. ORB-SLAM2-建立双目稠密点云(一)