在Swift中,为什么子类的指定初始化器要遵循这个顺序?
In Swift, why do subclass designated initializers follow this order?
我正在尝试了解编译器是如何解决这个问题的。
我读到 subclass
指定的初始值设定项必须:
- 首先初始化
subclass
的所有属性。
- 然后调用
super.init()
.
我不明白为什么 subclass
必须先初始化,然后再初始化 superclass
。如果 superclass
还不存在,这怎么可能?
谢谢!
在 https://docs.swift.org/swift-book/LanguageGuide/Initialization.html#ID215 下 "Two-Phase Initialization" 上,它有广泛的解释
主要原因是安全。每个 属性 必须首先分配一个值——然后只有当整个层次结构完成后,您才能开始读取值。
super.init() 在 subclass 属性 初始化之后出现的原因是 super.init() 可以调用可能在您的 class。当它这样做时,我们知道您已经为您的属性赋予了初始值。
我正在尝试了解编译器是如何解决这个问题的。
我读到 subclass
指定的初始值设定项必须:
- 首先初始化
subclass
的所有属性。 - 然后调用
super.init()
.
我不明白为什么 subclass
必须先初始化,然后再初始化 superclass
。如果 superclass
还不存在,这怎么可能?
谢谢!
在 https://docs.swift.org/swift-book/LanguageGuide/Initialization.html#ID215 下 "Two-Phase Initialization" 上,它有广泛的解释
主要原因是安全。每个 属性 必须首先分配一个值——然后只有当整个层次结构完成后,您才能开始读取值。
super.init() 在 subclass 属性 初始化之后出现的原因是 super.init() 可以调用可能在您的 class。当它这样做时,我们知道您已经为您的属性赋予了初始值。