为什么我们应该使用 init(coder),当我们可以将所有内容转储到 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,那么您就不能有一个稍后初始化的 init。

相关内容

  • 没有找到相关文章

最新更新