我读了 init coder aDecoder 到底是什么?
但这并不能解释为什么不把所有东西都放在里面awakeFromNib
而忘记使用init(coder aCoder : NSCoder)
?
在接受的答案的评论中,法蒂说:
“有时你不能那样做”。您通常可以但并非总是如此
谁能对此提供更多解释?
我读了 init coder aDecoder 到底是什么?
但这并不能解释为什么不把所有东西都放在里面awakeFromNib
而忘记使用init(coder aCoder : NSCoder)
?
在接受的答案的评论中,法蒂说:
“有时你不能那样做”。您通常可以但并非总是如此
谁能对此提供更多解释?
如果您lets
需要在 中进行初始化init
,则必须使用它而不是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,那么你就不能有一个稍后会被初始化的 init。