CLOSURES

最后更新于:2022-04-01 04:44:43

## CLOSURES 闭包(Closures)相当于 OC 中的 blocks,是包含一段代码的变量,闭包在 Cocoa Touch 中很常见。和方法(function)不同的是,闭包是变量,可以作为参数传递或是作为属性(property)储存。下面看例子: ~~~ let vw = UIView() UIView.animateWithDuration(0.5, animations: { vw.alpha = 0 }) ~~~ UIView 的 animateWithDuration 方法要求传入一个内含动画内容的闭包,其他的 Cocoa Touch 会帮你实现。之所以要使用闭包作为参数是因为 UIKit 在执行动画前需要做些准备,如此它会拷贝一份闭包内的代码并且在准备完成后执行。 以上示例也显示出在闭包内可以使用其外部的变量,这个特性成为闭包捕获。在闭包外声明了 vw 变量,并在闭包中使用了它。这十分有用,但要注意避免强引用循环(一个对象存储着一个闭包属性,同时这个属性又引用了这个对象)。 ### Trailing closures 这个特性是 Swift 为了更好的可读性增加的一个语法甜头,当方法的最后一个参数是闭包时,为避免闭包内容冗长而导致可读性下降,可以将代码段写在参数括号外,函数会将其自动最为最后一个参数调用: ~~~ UIView.animateWithDuration(0.5){ vw.alpha = 0 } //如果函数只有闭包一个参数,可以省略掉() ~~~ 至此 Hacking with Swift 教程的语言基础部分完成了,接下来开始着手 Project 部分,边敲项目边学习。 拓展阅读:[The new feature of Swift 2.0 by example](https://www.hackingwithswift.com/new-features-swift-2) *本文根据自己的理解写下的学习笔记,由于英语和技术水平有限,一定会有不少错误和纰漏,请以原文和官方文档为准,如果能在评论中指出错误则感激不尽。*
';