闭包
表达式
{(params) -> returnType in statements}
Sort 方法
见 Xcode
尾随闭包
尾随闭包 - 是一个书写在函数括号之后的闭包表达式 如果只需要一个闭包参数 可以将
()
省略
1 | func someFunctionThatTakesAClosure(closure: () -> Void) { |
非逃逸闭包(Nonescaping Closures)
当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,我们称该闭包从函数中逃逸。
当你定义接受闭包作为参数的函数时,你可以在参数名之前标注
@noescape
,用来指明这个闭包是不允许“逃逸”出这个函数的。
1 | func someFunctionWithNoescapeClosure(@noescape closure: () -> Void) { |
自动闭包(Autoclosures)
自动闭包是一种自动创建的闭包,用于包装传递给函数作为参数的表达式。这种闭包不接受任何参数,当它被调用的时候,会返回被包装在其中的表达式的值。这种便利语法让你能够用一个普通的表达式来代替显式的闭包,从而省略闭包的花括号。
自动闭包暗含了
@noescape
特性,如果你想让这个闭包可以“逃逸”,则应该使用@autoclosure(escaping)特性.
1 | // customersInLine is ["Ewa", "Barry", "Daniella"] |
捕获值
闭包中对任何其他元素的引用都是会被闭包自动持有的
为了优化,如果一个值是不可变的,Swift 可能会改为捕获并保存一份对值的拷贝。
Swift 也会负责被捕获变量的所有内存管理工作,包括释放不再需要的变量。
1 |
|
循环引用
weak
当所引用的对象被释放后,被标记为weak的变量会自动变成nil (被标记为@weak 的变量一定需要是Optional值)
unowned
设置以后即使它原来引用的内容已经被释放了,它仍然会保持对被已经释放了的对象的一个 “无效的” 引用,它不能是 Optional 值
见Xcode