当我们可以将所有内容转储到awakeFromNib中时,我们为什么要使用init(编码器)?

时间:2017-03-30 17:20:21

标签: ios swift initialization awakefromnib

我看了What exactly is init coder aDecoder?

但是,为什么不将所有内容都放在awakeFromNib内并忘记使用init(coder aCoder : NSCoder)

在接受回答的评论中,Fattie说:

  

“有时你不能这样做”。您通常可以但不总是

有人可以提供更多解释吗?

1 个答案:

答案 0 :(得分: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 } 中获取其值。

所以,

MyTrait

如果你没有init,那么你就不能拥有一个稍后初始化的init。