- 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中文教程第二章-2.7闭包
闭包 本页内容包含: 闭包表达式 尾随闭包 值捕获 闭包是引用类型 闭包是自包含的函数代码块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Obj ective-C 中 的 blocks (代码块) 以及其他一些编程语言中的 lambdas(匿名函数) 比较相似。 闭包可以捕获和存储其所在上下文中任意常量和变量的引用。 这就是所谓的闭合并包裹着这些常量和变 量,俗称闭包。Swift 会为您管理在捕获过程中涉及到的所有内存操作。 注意: 如果您不熟悉捕获 (capturing) 这个概念也不用担心,您可以在 捕获值 章节对其进行详细了 解。 在 函数 (这里需要函数章节提供相应链接进行配合) 章节中介绍的全局和嵌套函数实际上也是特殊的闭 包,闭包采取如下三种形式之一: 全局函数是一个有名字但不会捕获任何值的闭包 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的匿名闭包 Swift 的闭包表达式拥有简洁的风格,并鼓励在常见场景中进行语法优化,主要优化如下: 利用上下文推断参数和返回值类型 隐式返回单表达式闭包,即单表达式闭包可以省略 return关键字 参数名称缩写 尾随 (Trailing) 闭包语法 闭包表达式 (Closure Expressions) 嵌套函数 (这里需要函数章节提供相应链接及锚点进行配合) 是一个在较复杂函数中方便进行命名和定 义自包含代码模块的方式。 当然,有时候撰写小巧的没有完整定义和命名的类函数结构也是很有用处的, 尤其是在您处理一些函数并需要将另外一些函数作为该函数的参数时。 闭包表达式是一种利用简洁语法构建内联闭包的方式。 闭包表达式提供了一些语法优化,使得撰写闭包变 得简单明了。 下面闭包表达式的例子通过使用几次迭代展示了 sort函数定义和语法优化的方式。 每一 次迭代都用更简洁的方式描述了相同的功能。 sort 函数 (The Sort Function) Swift 标准库提供了 sort函数,会根据您提供的基于输出类型排序的闭包函数将已知类型数组中的值进 行排序。 一旦排序完成,函数会返回一个与原数组大小相同的新数组,该数组中包含已经正确排序的同类 型元素。 下面的闭包表达式示例使用 sort函数对一个 String 类型的数组进行字母逆序排序,以下是初始数组 值: let names [Chris, Alex, Ewa, Barry, Daniella] sort函数需要传入两个参数: 已知类型的数组 闭包函数,该闭包函数需要传入与数组类型相同的两个值,并返回一个布尔类型值来告诉 sort函 数当排序结束后传入的第一个参数排在第二个参数前面还是后面。如果第一个参数值出现在第二个参 数值前面,排序闭包函数需要返回 true ,反之返回 false。 该例子对一个 String 类型的数组进行排序,因此排序闭包函数类型需 为 (String, String) - Bool。 提供排序闭包函数的一种方式是撰写一个符合其类型要求的普通函数,并将其作为 sort函数的第二个参 数传入: func backwards(s1: String, s2: String) - Bool { return s1 s2 } var reversed sort(names, backwards) // reversed 为 [Ewa, Daniella, Chris, Barry, Alex] 如果第一个字符串 ( s1) 大于第二个字符串 ( s2) , backwards函数返回 true ,表示在新的数组 中 s1应该出现在 s2前。 对于字符串中的字符来说,大于 表示 按照字母顺序较晚出现 。 这意味着 字母 B大于字母 A,字符串 Tom大于字符串 Tim。 其将进行字母逆序排 序, Barry将会排在 Alex之后。 然而,这是一个相当冗长的方式,本质上只是写了一个单表达式函数 (a b) 。 在下面的例子中,利用闭合 表达式语法可以更好的构造一个内联排序闭包。 闭包表达式语法 (Closure Expression Syntax) 闭包表达式语法有如下一般形式: { (parameters) - returnType in statements } 闭包表
文档评论(0)