gpt4 book ai didi

ios - 覆盖 Swift 的失败初始化器

转载 作者:可可西里 更新时间:2023-11-01 00:38:03 25 4
gpt4 key购买 nike

这里是 a link到 Swift 教程。在 Initialization-Overriding a Failable Initializer 部分请注意,如果您使用不可失败的子类初始值设定项覆盖可失败的父类(super class)初始值设定项,则子类初始值设定项不能委托(delegate)给父类(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 non-empty name value
init?(name: String) {
if name.isEmpty { return nil }
self.name = name
}
}

和:

class AutomaticallyNamedDocument: Document {
override init() {
super.init()
self.name = "[Untitled]"
}
// This is nonfailable override superclass's failable
override init(name: String) {
// Why subclass initializer still can delegate up to the superclass initializer??
super.init()
if name.isEmpty {
self.name = "[Untitled]"
} else {
self.name = name
}
}
}

子类初始化器不能委托(delegate)给父类(super class)初始化器为什么子类初始化器仍然可以委托(delegate)给父类(super class)初始化器?

最佳答案

那段话意味着您不能委托(delegate)给重写的可失败初始化程序。请注意前面的这段话:

A failable initializer of a class, structure, or enumeration can delegate across to another failable initializer from the same class, structure, or enumeration. Similarly, a subclass failable initializer can delegate up to a superclass failable initializer.

In either case, if you delegate to another initializer that causes initialization to fail, the entire initialization process fails immediately, and no further initialization code is executed.

这应该清楚为什么你不能委托(delegate)给被覆盖的可失败初始化器——如果它真的失败了,整个初始化过程都会失败,但你正处于一个可失败的初始值设定项。

在您的情况下,您将委托(delegate)给父类(super class)的非失败初始值设定项 (super.init()),因此没有问题。

关于ios - 覆盖 Swift 的失败初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27308186/

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