- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Swift教程之闭包详解
这篇文章主要介绍了Swift教程之闭包详解,闭包可以在上下文的范围内捕获、存储任何被定义的常量和变量引用,因这些常量和变量的封闭性,而命名为“闭包(Closures)”,需要的朋友可以参考下
闭包(Closures)是独立的函数代码块,能在代码中传递及使用。Swift中的闭包与C和Objective-C中的代码块及其它编程语言中的匿名函数相似。
闭包可以在上下文的范围内捕获、存储任何被定义的常量和变量引用。因这些常量和变量的封闭性,而命名为“闭包(Closures)”。Swift能够对所有你所能捕获到的引用进行内存管理。
NOTE
假如你对“捕获(capturing)”不熟悉,请不要担心,具体可以参考Capturing Values(捕获值)。
全局函数和嵌套函数已在 Functions(函数)中介绍过,实际上这些都是特殊的闭包函数
全局函数都是闭包,特点是有函数名但没有捕获任何值。
嵌套函数都是闭包,特点是有函数名,并且可以在它封闭的函数中捕获值。
闭包表达式都是闭包,特点是没有函数名,可以使用轻量的语法在它所围绕的上下文中捕获值。
Swift的闭包表达式有着干净,清晰的风格,并常见情况下对于鼓励简短、整洁的语法做出优化。这些优化包括:
推理参数及返回值类型源自上下文
隐式返回源于单一表达式闭包
简约参数名
尾随闭包语法
1、闭包表达式
嵌套函数已经在Nested Functions(嵌套函数)中有所介绍,是种方便命名和定义自包含代码块的一种方式,然而,有时候在编写简短函数式的构造器时非常有用,它不需要完整的函数声明及函数名,尤其是在你需要调用一个或多个参数的函数时。
闭包表达式是一种编写内联闭包的方式,它简洁、紧凑。闭包表达式提供了数种语义优化,为的是以最简单的形式编程而不需要大量的声明或意图。以下以同一个sort函数进行几次改进,每次函数都更加简洁,以此说明闭包表达式的优化。
Sort函数
Swift的标准函数库提供了一个名为sort的函数,它通过基于输出类型排序的闭包函数,给已知类型的数组数据的值排序。一旦完成排序工作,会返回一个同先前数组相同大小,相同数据类型,并且的新数组,并且这个数组的元素都在正确排好序的位置上。
The closure expression examples below use the sort function to sort an array of String values in reverse alphabetical order. Heres the initial array to be sorted:
以下的闭包表达式通过sort函数将String值按字母顺序进行排序作说明,这是待排序的初始化数组。
复制代码 代码如下:
let names = [Chris, Alex, Ewa, Barry, Daniella]
sort函数需要两个参数:
一个已知值类型的数组
一个接收两个参数的闭包函数,这两个参数的数据类型都同于数组元素。并且
返回一个Bool表明是否第一个参数应排在第二个参数前或后。
这个例子是一组排序的字符串值,因此需要排序的封闭类型的函数(字符串,字符串)- Bool。
构造排序闭包的一种方式是书写一个符合其类型要求的普通函数:backwards,并将其返回值作为 sort 函数的第二个参数传入:
复制代码 代码如下:
func backwards(s1: String, s2: String) - Bool {
return s1 s2
}
var reversed = sort(names, backwards)
// reversed is equal to [Ewa, Daniella, Chris, Barry, Alex]
如果backwards函数参数 s1 大于 s2,则返回true值,表示在新的数组排序中 s1 应该出现在 s2 前。 字符中的 “大于” 表示 “按照字母顺序后出现”。 这意味着字母 “B” 大于字母 “A”, 字符串 “Tom” 大于字符串 “Tim”。 其将进行字母逆序排序,”Barry” 将会排在 “Alex” 之后,以此类推。
但这是一个相当冗长的方式,本质上只是做了一个简单的单表达式函数 :(a b)。 下面的例子中,我们利用闭合表达式可以相比上面的例子更效率的构造一个内联排序闭包。
闭包表达式语法
闭合表达式语法具有以下一般构造形式:
复制代码 代码如下:
{ (parameters) - return type in
statements
}
闭包表达式语法可以使用常
文档评论(0)