代码之家  ›  专栏  ›  技术社区  ›  J. Doe

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

  •  -1
  • J. Doe  · 技术社区  · 6 年前

    我得到了这个密码:

    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")
        }
    }
    

    万能的xcode9.4.1告诉我需要改变 open public 公众的 ,编译器告诉我需要将其更改为 打开 . 两个班都在上课,我不能让它工作 ,没有我的超类A显式实现在类B中看到的必需的初始值设定项。为什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Community datashaman    4 年前

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

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

    必需的初始值设定项

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

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

    如何避免自己实施:

    初始值设定项继承

    规则1

    来源