Swift面试题更新 2026-08-03

请阐述Swift语言中构造器的分类情况,并说明便捷初始化器(convenience init)与指定初始化器(designated init)之间的主要区别及它们各自的适用场景。

考察说明

考查Swift中构造器机制的理解,包括构造器类型及其职责分工。

回答思路

  1. 【回答框架 1】Swift构造器分为指定构造器和便捷构造器,此外还有可失败构造器和必要构造器。指定构造器是类的主要构造器,负责确保所有存储属性初始化,并调用父类指定构造器完成继承部分。
  2. 【回答框架 2】便捷构造器必须调用同一类中的其他构造器(指定或便捷),常用于提供默认值或简化参数。它不负责存储属性初始化,也不能调用父类构造器。
  3. 【回答框架 3】区别在于职责:指定构造器必须存在且直接初始化所有属性,便捷构造器是辅助性的,必须最终委托到一个指定构造器。使用场景:当需要通过不同参数组合创建实例时,用便捷构造器减少重复代码。
  4. 【回答框架 4】规则:便捷构造器必须委托到同一类的另一个构造器,指定构造器必须向上调用父类指定构造器。继承时,若子类有所有属性默认值且不定义构造器,会自动继承父类构造器。
  5. 【关键点 1】指定构造器是类的主要构造器,必须初始化所有存储属性并调用父类构造器。
  6. 【关键点 2】便捷构造器必须调用本类的其他构造器,不负责初始化存储属性。
  7. 【关键点 3】便捷构造器用于提供便捷入口,如设置默认值,且最终必须走指定构造器。
  8. 【易错点 1】易混淆:便捷构造器不能调用父类构造器,只能调用本类构造器。
  9. 【易错点 2】易出错:存储属性无默认值时,若未正确初始化,编译不通过。
  10. 【易错点 3】误用:用便捷构造器直接初始化所有属性,违反规范,影响可读性。