IOS面试题——Swift初始化器(8)

一 面试题汇总

  1. 指定初始化器和便捷初始化器有什么区别?required
  2. 重写父类指定初始化器和便捷初始化器有何区别?
  3. 初始化器自动继承的规则?
  4. 初始化器中赋值会触发属性观察器么?

二 面试题解答(仅供参考)

2.1 指定初始化器和便捷初始化器有什么区别?required

1
2
指定初始化器是类的主要初始化器,必须初始化所有存储属性并且调用父类的指定初始化器。
便捷初始化器是辅助初始化器,依赖于指定初始化器来完成实际的初始化工作,提供简便的初始化选项。

2.2 重写父类指定初始化器和便捷初始化器有何区别?

1
2
3
4
重写父类的指定初始化器:子类必须调用父类的指定初始化器,负责初始化父类和当前类的所有存储属性。

重写父类的便捷初始化器:子类可以通过调用父类的指定初始化器来完成初始化,
简化初始化过程,不直接调用父类的便捷初始化器。

2.3 初始化器自动继承的规则?

1
2
3
如果子类没有定义自己的初始化器,父类的初始化器会自动继承。
如果子类定义了自己的指定初始化器或便捷初始化器,则父类的初始化器不会自动继承。
继承的指定初始化器必须符合初始化规则,子类可以选择重写它们。

2.4 初始化器中赋值会触发属性观察器么?

1
2
3
初始化器中赋值 不会 触发属性观察器,
因为在此时属性的赋值是初始化的一部分,Swift 会跳过触发观察器的过程。
只有在对象初始化完成后,对属性值的更改才会触发属性观察器。

三 参考

  • 简书—Swift初始化器