Swift之闭包

前端之家收集整理的这篇文章主要介绍了Swift之闭包前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

闭包的认识:

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

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

@H_301_7@{ (参数列表) -> 返回值类型 in 一系列语句 }

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

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

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

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

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

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

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

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

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

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

原文链接:https://www.f2er.com/swift/326058.html

猜你在找的Swift相关文章