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

时间:2016-02-22 08:42:23

标签: swift uiview nscoder

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

那究竟是什么意思呢?

---更新 -

下面的评论帮助我弄明白了,它被称为"可用的初始化程序",另一个使概念更容易理解的例子是UIFont的connivence init,因为UIFont可能不存在。

public /*not inherited*/ init?(name fontName: String, size fontSize: CGFloat)

2 个答案:

答案 0 :(得分:4)

它被称为可用的初始化程序。在“Swift编程语言”一书中,它将其描述为

  

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

https://swift.org/documentation/TheSwiftProgrammingLanguage(Swift2.2).epub

答案 1 :(得分:0)

init?()Failable Initializers表示初始化程序可以返回nil。这意味着无法构造对象(创建失败),将任何参数传递到负责创建对象的init或由于某种原因而失败是很有用的。 / p>