[英]Why do we needed category when we can use a subclass? and Why we needed blocks when we can use functions?
[英]Why should we use init(coder) when we can just dump everything inside awakeFromNib?
但這不能回答為什么不將所有內容都放入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.