gpt4 book ai didi

swift - 为什么不能在初始化器中使用 if let 语法从子类的不可失败初始化器调用可失败初始化器? [ swift ]

转载 作者:行者123 更新时间:2023-11-30 12:17:04 25 4
gpt4 key购买 nike

根据 Apple 的说法,“您可以在初始化程序中使用强制展开来从父类(super class)调用可失败初始化程序,作为子类不可失败初始化程序实现的一部分。”他们提供的代码如下所示:

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
}

}
}

最佳答案

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

swift error

看起来 swift 编译器不会将可失败的初始化器视为可选项,因此“if let”用法不适用于它们。

关于swift - 为什么不能在初始化器中使用 if let 语法从子类的不可失败初始化器调用可失败初始化器? [ swift ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45288272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com