Swift编程-闭包Closure
目录
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相关推荐
- python 函数对象(函数式编程 lambda、map、filter、reduce)、闭包(closure)
1.函数对象 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函 ...
- Scala编程之闭包(closure)
一.概念 闭包:我们把一个函数与其相关引用环境(变量)组合成一个整体叫做闭包 概念晦涩难懂,下面我们用一个例子说明 二.小例子 def minusxy(x:Int) = (y:Int)=>x-y ...
- Swift编程的15个技巧
自2014年9月1.0版发布后,Savvy的应用开发团队就开始在iOS项目中实验并使用Swift.不过由于Swift相对还很新,当时大多项目仍在使用Objective-C:自从2015年9月Swift ...
- swift_016(Swift 的闭包)
//***********swift学习之16--闭包--*************************** /* 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者 ...
- Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记
Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...
- 【Python】闭包Closure
原来这就是闭包啊... 还是上次面试,被问只不知掉js里面的闭包 闭包,没听过啊...什么是闭包 回来查了下,原来这货叫闭包啊...... ------------------------------ ...
- Swift学习笔记笔记(一)Swift编程步骤数据类型
一.实验目的: 掌握Swift编程方法. 掌握Swift数据类型. 二.实验原理: playground的界面与使用方法. 常量与变量的定义方法. 3.常量与变量的类型声明方法. 三.实验步骤及内容: ...
- python代码:闭包closure的一个例子
python代码:闭包closure的一个例子 #!/usr/bin/python # -*- coding: UTF-8 -*- """ @author: @file: ...
- naarray查询 swift_从入门到精通Swift编程(完整 未加密 小码哥) [16.3G]
目录:/从入门到精通Swift编程(完整 未加密 小码哥) [16.3G] : U! s1 a8 i- s+ O, c7 i ┣━━01-基础语法.汇编初探 [367.2M]# D% l* ...
- 《Swift编程入门经典》
2019独角兽企业重金招聘Python工程师标准>>> <Swift编程入门经典> 有趣.快速地构建iOS和OS X应用,Swift是苹果公司用于iOS和OS X开发的新 ...
最新文章
- Android如何实现简单音乐播放器的代码
- 字符串匹配的Boyer-Moore算法
- 可以直接考甲级吗_函授本科可以考四级吗
- Android 安全机制概述
- 爬虫python 新闻,Python爬虫实例--爬取人民网新闻
- java 蓝桥杯算法训练 数组查找及替换
- python必背100源代码-学会这个Python库,至少能减少100行代码
- iOS开发UI篇—Button基础
- 细谈Axios中那些不为人知的秘密!一文读懂Axios
- 电脑ndows无法启动,电脑无法启动windows帮助和支持为什么?
- 简单抽样技术——样本均值是总体均值的无偏估计
- 电脑自带的cmd/Powershell连接远程服务器(实用技巧)
- 8.微信小程序-Mobx数据共享(类似vuex)
- Set集合的概述及特点
- 新学期,我的目标与展望。(中秋快乐)
- A4. MTK开机流程
- 安卓开发 之小白养成-Android适配
- 指南针的实现代码两种方法,怎么用
- 利用JS中的循环语句来实现正方形、长方形、平行四边形、三角形、菱形、空心菱形。
- 接口技术课程设计——一种基于MFC构造自动测量系统
热门文章
- Web终端SSH功能
- Python操作SQLAlchemy
- Party (Standard IO)
- 帮公司人事MM做了个工资条拆分工具
- 编译器错误信息:CS0016:未能写入输出文件 c:\WINDOWS\Microsoft.NET\Framework\...的解决办法...
- Windows mobile美化之-短信界面美化修改~
- 使用dime传输大附件的设置(WSE Soap toolkit)
- MySQL SQL error: #1271 - Illegal mix of collations for operation 'UNION'
- 再谈new functionName
- ORB-SLAM2-建立双目稠密点云(一)