可解码强制超级开放类来实现初始值设定项

  • 本文关键字:实现 解码 swift decodable
  • 更新时间 :
  • 英文 :


我得到了这个代码:

open class A: Decodable {
public init() {
}
}
open class B: A {
public override init() {
super.init()
}
open required init(from decoder: Decoder) throws {
fatalError("init(from:) has not been implemented")
}
}

全能的Xcode 9.4.1告诉我,我需要在所需的关键字之前将open更改为public。在我open更改为public后,编译器告诉我需要将其更改为open。当两个类都open时,如果没有我的超类 A 显式实现所需的初始值设定项,我无法让它工作,如类 B 所示。

Decodable 强制超级开放类来实现初始值设定项

如果您没有继承超类所需的初始值设定项,则必须自己实现它。

必需的初始值设定项

在类初始值设定项

的定义之前编写所需的修饰符,以指示类的每个子类都必须实现该初始值设定项:<..>

还必须在所需初始值设定项的每个子类实现之前编写所需的修饰符,以指示初始值设定项要求适用于链中的其他子类。

如果可以使用继承的初始值设定项满足要求,则不必提供所需初始值设定项的显式实现。

如何避免自己实现它:

初始值设定项继承

规则1

如果子类未定义任何指定的初始值设定项,则它会自动继承其所有超类指定的初始值设定项。

来源

  • 初始化 #Required 初始值设定项
  • 初始化 #Automatic 初始值设定项继承

相关内容

  • 没有找到相关文章

最新更新