为什么不能在初始化程序中使用if let语法从子类的nonfailable初始化程序中调用可用的初始化程序? [迅速]

时间:2017-07-24 19:09:01

标签: swift initialization

根据Apple的说法,“你可以在初始化程序中使用强制解包来从超类中调用可用的初始化程序,作为子类的不可用初始化程序实现的一部分。”他们提供的代码如下所示:

class Document {
var name: String?
// this initializer creates a document with a nil name value
init() {}
// this initializer creates a document with a nonempty name value
init?(name: String) {
    if name.isEmpty { return nil }
    self.name = name
}
}
class UntitledDocument: Document {
override init() {
    super.init(name: "[Untitled]")!
}
}

我用以下代码替换了子类,但if let语法不起作用。我对if let语法的理解是提供了一个更安全的工具,为什么它不能在这里工作?

class UntitledDocument: Document {
override init() {
    if let xx = super.init(name: "[Untitled]") {
        xx
    }

}
}

1 个答案:

答案 0 :(得分:0)

所以,有趣的是,当我尝试使用nil合并运算符(??)时,这是我得到的错误/警告:

swift error

看起来swift编译器不会将可用的初始化程序视为与optionals相同,因此“if let”用法将不适用于它们。