簡體   English   中英

當我們可以將所有內容都轉儲到awakeFromNib中時,為什么還要使用init(coder)?

[英]Why should we use init(coder) when we can just dump everything inside awakeFromNib?

我讀了什么是初始化編碼器aDecoder?

但這不能回答為什么不將所有內容都放入awakeFromNib並忘記使用init(coder aCoder : NSCoder)嗎?

在接受的答案的評論中,法蒂說:

“有時您無法做到”。 您通常可以但並非總是

誰能提供更多解釋?

如果您有需要在init初始化的lets ,則必須使用它而不是awakeFromNib

這樣做可以避免隱式展開的可選內容。

編輯:

如果您希望您的班級擁有屬性,則可以

 let a: String

要么

 var a: String! = nil // this is called an "implicitly unwrapped optional" -- it's the ! at the end of the type that makes it that.

第一種是優選的,因為它是安全的。 在第二種方法中,您冒着訪問a的風險,然后對其進行初始化。

但是,以確保a總是初始化,它需要在獲取其值init類的。

所以,

init(coder aCoder : NSCoder) {
   a = "hello" // usually this is something more complex
   // read in coder or whatever else you need to do
}

如果您沒有init,那么您將無法再進行初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM