有時,你希望通過運行幾行代碼來計算出變量的初始值。完成這件事簡單且緊湊的方式就是使用匿名函數,然後立刻調用(參見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 ... } } }
事實上,定義與調用匿名函數常常是通過多行代碼來計算出實例屬性初始值的唯一合法方式。原因在於,當初始化實例屬性時是無法調用實例方法的,因為這個時候實例還不存在;畢竟,實例正在創建過程中。