我最近採取了Swift爲了學習如何編程iOS應用程序。我一直在關注跳過威爾遜的教程,並有當他連接的出口,並且得到了片刻:Swift:!而不是=無
@IBOutlet var ticTacImg1: UIImageView = nil
而不是讓我獲得:
@IBOutlet var ticTacImg1: UIImageView!
,如果我試圖改變它的Xcode告訴我這是一個錯誤。我究竟做錯了什麼?
我最近採取了Swift爲了學習如何編程iOS應用程序。我一直在關注跳過威爾遜的教程,並有當他連接的出口,並且得到了片刻:Swift:!而不是=無
@IBOutlet var ticTacImg1: UIImageView = nil
而不是讓我獲得:
@IBOutlet var ticTacImg1: UIImageView!
,如果我試圖改變它的Xcode告訴我這是一個錯誤。我究竟做錯了什麼?
@IBOutlet var ticTacImg1: UIImageView!
是正確的代碼。
@IBOutlet
屬性需要是可選的,因爲它在系統將視圖連接到它之前最初有一個nil
值。標記爲!
的隱式解包可選意味着它將在使用時自動解包。
我不確定你正在引用哪個特定的教程,但我最初的想法是,他可能會使用Xcode 6的早期測試版,但並未強制執行此操作。
在Xcode 6的早期版本中,標記爲@IBOutlet
的任何內容都變成了隱式展開的弱選項。
也就是說
@IBOutlet var ticTacImg1: UIImageView = nil
將被編譯爲
@IBOutlet weak var ticTacImg1: UIImageView! = nil
這不再是真實的。現在你必須聲明它的可選狀態,但它仍然很弱。
也就是說
@IBOutlet var ticTacImg1: UIImageView! = nil
將被編譯爲
@IBOutlet weak var ticTacImg1: UIImageView! = nil
爲什麼ticTacImg1
沒有初始化爲nil
的原因是,它並不重要。在Swift中,未初始化的隱式解包選項的值爲nil
,因此= nil
是多餘的。
如果它是零,則會崩潰。 – Abizern 2014-10-30 18:43:27
@Abizern正確,但在大多數情況下,連接到故事板的變量永遠不會在初始化後變爲零。 – nickgraef 2014-10-30 18:48:19