Skip to content

Latest commit

 

History

History
41 lines (26 loc) · 1.01 KB

File metadata and controls

41 lines (26 loc) · 1.01 KB

Closures

闭包语法

闭包表达式语法具有以下一般形式:

{ (<#parameters#>) -> <#return type#> in
   <#statements#>
}
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
    return s1 > s2
})

闭包是引用类型

这也意味着,如果将一个闭包分配给两个不同的常量或变量,则这两个常量或变量都引用同一个闭包。

let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()
// returns a value of 50


incrementByTen()
// returns a value of 60

上面的示例显示调用 alsoIncrementByTen 与调用 incrementByTen 相同。因为它们都引用相同的闭包,所以它们都会递增并返回相同的运行总计。

逃逸闭包(Escaping Closures)

当闭包作为参数传递给函数时,称为转义函数,但在函数返回后调用。当你声明一个将闭包作为其参数之一的函数时,你可以在参数类型之前写入 @escaping 以指示允许闭包转义。