委托Superclass

时间:2016-09-06 08:41:31

标签: swift initialization delegation

为什么不允许从子类中的指定初始值设定项委托给其超类的便捷初始值设定项?

我很清楚,根据文档,子类中的指定初始化程序必须委托其超类的指定初始化程序。

  

类类型的初始化程序委派

     

简化关系   在指定和便利初始化程序之间,Swift应用了   遵循初始化程序之间的委托调用的三个规则:

     

规则1

     

指定的初始化程序必须调用指定的初始化程序   来自其直接的超类。

     

规则2

     

便捷初始化程序必须从中调用另一个初始化程序   同一个班级。

     

规则3

     

便利初始化程序必须最终调用指定的   初始化程序。

     

记住这一点的一个简单方法是:

     
      
  • 指定的初始值设定项必须始终委派向上

  •   
  • 便利初始化程序必须始终在中委派

  •   

我也理解指定和便利初始化程序之间的区别以及两阶段初始化过程,但是不会调用超类的便利初始化程序,这反过来导致在同一个超类中调用相应的指定初始化程序(比较图表)是否满足整个类层次结构中完全初始化属性的要求?

即使直接调用便利初始化程序只有很小的好处,我仍然想知道是否有充分理由不允许这样做(例如与继承或覆盖相关)?

提前谢谢。

图表:直接调用超类的便利初始化程序

Calling a convenience initializer of superclass directly.

0 个答案:

没有答案