0

我读了 init coder aDecoder 到底是什么?

但这并不能解释为什么不把所有东西都放在里面awakeFromNib而忘记使用init(coder aCoder : NSCoder)

在接受的答案的评论中,法蒂说:

“有时你不能那样做”。您通常可以但并非总是如此

谁能对此提供更多解释?

4

1 回答 1

1

如果您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。

于 2017-03-30T17:46:14.457 回答