2016-07-30 81 views
0

當我創建在視圖(從對象庫拖)一個標籤並使IBOutlet中連接標籤的viewController(Ctrl鍵並拖動),通過Xcode中生成的默認代碼是,例如,@IBOutlet weak var displayColumn: UILabel!爲什麼標籤的默認類型是強制解包可選?

我可以刪除感嘆號並將其設置爲UILable。但是Xcode希望它是一個強制解包的可選類型,這一定是有原因的。

問題:我不認爲我理解在這裏使用可選類型的原因。因爲我已經在我的視圖中創建了一個標籤並將其連接到我的控制器,所以它堅定地存在,它存在,我創建了它。爲什麼Xcode需要一個選項作爲默認類型?如果它說標籤內的文本是一個選項,那對我來說聽起來很合理,因爲標籤在運行時間的某個點可能是空的。

非常感謝

回答

5

你已經在Xcode中創建一個標籤,並表示Xcode的,你想要的標籤連接到該@IBOutlet。但是這種聯繫直到後來纔會發生。

這是運行時事件的順序。

  1. viewController被創建(實例化)。
  2. Storyboard或.xib未被存檔。標籤是在這個時候創建​​的。
  3. @IBOutlet s和@IBAction s已連接。

在Swift中,當一個類被實例化時,所有的屬性都必須被初始化。在步驟1中,網點是nil,因爲它們尚未連接。爲了做到這一點,他們必須聲明爲可選項

這是完全有效使用正常可選,如:

@IBOutlet weak var displayColumn: UILabel? 

但你不得不應付每次訪問它時展開它。 爲零的唯一時間是第3步尚未發生時(例如,在prepareForSegue中),或者您忘記連接插座或將其重命名。在這些情況下,訪問nil導致的崩潰會提醒您注意問題。

+0

讓你這麼多。非常好的解釋,清晰和堅實! – SLN

+0

很好的解釋 –

相關問題