在Swift中,为什么子类的指定初始化器要遵循这个顺序?

In Swift, why do subclass designated initializers follow this order?

我正在尝试了解编译器是如何解决这个问题的。

我读到 subclass 指定的初始值设定项必须:

  1. 首先初始化subclass的所有属性。
  2. 然后调用super.init().

我不明白为什么 subclass 必须先初始化,然后再初始化 superclass。如果 superclass 还不存在,这怎么可能?

谢谢!

https://docs.swift.org/swift-book/LanguageGuide/Initialization.html#ID215 下 "Two-Phase Initialization" 上,它有广泛的解释

主要原因是安全。每个 属性 必须首先分配一个值——然后只有当整个层次结构完成后,您才能开始读取值。

super.init() 在 subclass 属性 初始化之后出现的原因是 super.init() 可以调用可能在您的 class。当它这样做时,我们知道您已经为您的属性赋予了初始值。