加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift之闭包

发布时间:2020-12-14 01:50:55 所属栏目:百科 来源:网络整理
导读:闭包的认识: 闭包 (Closures) 是可以在你的代码里传递和使用的,自包含的功能代码块。Swift 里的闭包跟 C 和 Objective-C 里的 block 类似,也就是其他语言里的所谓的 lambda 。 闭包表达式语法的常见形式如下: { (参数列表) - 返回值类型 in 一系列语句 }

闭包的认识:

闭包 (Closures) 是可以在你的代码里传递和使用的,自包含的功能代码块。Swift 里的闭包跟 C 和 Objective-C 里的 block 类似,也就是其他语言里的所谓的 lambda 。

闭包表达式语法的常见形式如下:

{ (参数列表) -> 返回值类型 in

     一系列语句

  }

闭包表达式可以使用常量参数,变量参数和 inout 参数,但是不允许参数默认值。可变参数仅允许出现在参数列表的末尾。元组 (Tuple) 类型也可以作为参数类型和返回值类型

let names = ["Chris","Alex","Ewa","Barry","Daniella"]
reversed = sort(names,{ (s1: String,s2: String) -> Bool in return s1 > s2 })

闭包的函数体 (body) 是通过 in 关键字开始的,这个关键字表示闭包的参数和返回值类型定义结束,接下来是闭包的函数体。

reversed = sort(names,{ s1,s2 in return s1 > s2 } )

如果将闭包传递给一个函数作为内联闭包,我们总是也许可以推断出它的参数类型和返回值类型,因此,你很少需要以完整的形式来编写内联闭包。

虽然如此,如果你愿意,你还是可以明确地写上类型,我们鼓励这样的方式,这可以让你的代码的阅读者避免歧义。

Swift 自动地为内联闭包提供了参数名的快速记法,可以使用 0, 1,$2 来指代闭包的参数值,以此类推。

如果你在闭包表达式里使用参数名速记法,你可以从定义里忽略掉参数列表,从预期的函数类型就可以推断出速记法里的参数的序号数字和类型。in 关键字也可以被忽略,因为闭包表达式完全由它的函数体组成:

reversed = sort(names,{ $0 > $1 } )

这里的 0, 1 表示闭包的第一个和第二个 String 参数。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读