有时,你希望通过运行几行代码来计算出变量的初始值。完成这件事简单且紧凑的方式就是使用匿名函数,然后立刻调用(参见2.12节)。下面就来改写之前的示例进行说明:
let timed : Bool = { if val == 1 { return true } else { return false }}
在初始化实例属性时也可以这么做。在这个类中有一个图片(UIImage),后面将会用到多次。合理的方式是提前创建好该图片,并将其作为类的常量实例属性。创建图片意味着要绘制它,这需要几行代码才能实现。因此,我通过定义和调用一个匿名函数来声明并初始化该属性,如下代码所示(请参见第2章了解imageOfSize这个辅助函数):
class RootViewController : UITableViewController { let cellBackgroundImage : UIImage = { return imageOfSize(CGSizeMake(320,44)) { // ... drawing goes here ... } }}
事实上,定义与调用匿名函数常常是通过多行代码来计算出实例属性初始值的唯一合法方式。原因在于,当初始化实例属性时是无法调用实例方法的,因为这个时候实例还不存在;毕竟,实例正在创建过程中。