问号在公共init中是什么意思?(编码器aDecoder:NSCoder)?

Qiu*_*ang 6 uiview nscoder swift

我认为问号中的public init?(coder aDecoder: NSCoder)意思不是可选的。另外,当我覆盖它时,我发现根本不需要写问号。

那到底是什么意思呢?

-更新-

下面的评论帮助我弄清楚了它被称为“失败的初始化程序”,另一个使该概念更易于理解的示例是UIFont的自发init,因为UIFont可能不存在。

public /*not inherited*/ init?(name fontName: String, size fontSize: CGFloat)
Run Code Online (Sandbox Code Playgroud)

Ch0*_*0l8 5

这称为故障初始化器。在《 Swift编程语言》一书中,它描述为:

“有时定义一个初始化失败的类,结构或枚举很有​​用。失败可能是由无效的初始化参数值,缺少所需的外部资源或其他阻止初始化成功的条件触发的。”

检查Swift文档中的“失败的初始化程序”部分