【问题标题】:What does the question mark means in public init?(coder aDecoder: NSCoder)?公共初始化中的问号是什么意思?(coder aDecoder: NSCoder)?
【发布时间】:2016-02-22 08:42:23
【问题描述】:

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

那么这到底是什么意思呢?

--- 更新 --

下面的评论帮助我弄清楚了,它被称为“failable initializer”,另一个让这个概念更容易理解的例子是 UIFont 的便利 init,因为 UIFont 可能不存在。

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

【问题讨论】:

  • 我刚刚下载了最新的 2.2 版本,发现它叫做“failable initializer”。 2.1版本不是这个意思。谢谢!

标签: swift uiview nscoder


【解决方案1】:

它被称为可失败初始化器。在《The Swift Programming Language》一书中,将其描述为

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

检查Swift Docs中的“Failable Initializers”部分

【讨论】:

  • 是的,我已经弄清楚了(Swift 2.1 的书没有提到它,请参阅上面的 cmets)。谢谢
【解决方案2】:

init?() 或 Failable Initializers

init?()Failable Initializers 表示初始化器可以返回nil。这意味着无法构造对象(创建失败),将 any 参数传递给负责创建对象的init 很有用,或者由于某种原因而失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多