我不认为public init?(coder aDecoder: NSCoder)
中的问号意味着选项。此外,当我覆盖它时,我发现我根本不需要写问号。
那究竟是什么意思呢?
---更新 -
下面的评论帮助我弄明白了,它被称为"可用的初始化程序",另一个使概念更容易理解的例子是UIFont的connivence init,因为UIFont可能不存在。
public /*not inherited*/ init?(name fontName: String, size fontSize: CGFloat)
答案 0 :(得分:4)
它被称为可用的初始化程序。在“Swift编程语言”一书中,它将其描述为
“定义初始化失败的类,结构或枚举有时很有用。此失败可能由无效的初始化参数值,缺少必需的外部资源或阻止初始化成功的其他条件触发。“
https://swift.org/documentation/TheSwiftProgrammingLanguage(Swift2.2).epub
答案 1 :(得分:0)
init?()
或Failable Initializers
表示初始化程序可以返回nil。这意味着无法构造对象(创建失败),将任何参数传递到负责创建对象的init
或由于某种原因而失败是很有用的。 / p>