Swift中重写`init( )`方法时无需调用`super.init( )`的情况

根据Swift的构造器生成规则:

  • 如果自定义指定构造器,必须在自定义构造方法里调用父类的指定构造器;

  • 如果自定义便利构造器,必须在自定义的构造方法里调用自己的指定构造器。

那么有一种情况,是自定义指定构造器的时候,不需要调用父类的指定构造器。这种情况什么时候发生呢?

这种情况发生在当父类没有任何的指定构造器、父类所有的储存属性都不在子类重写,并且子类重写的构造方法是init()方法的时候。

请注意三个限制条件:

  • 父类没有任何的指定构造器;

  • 父类的所有储存属性都不在子类重写;

  • 自己重写的是init()方法。

举个例子,父类是A,子类是B。

class A {
var: String = "c"
} 

class B: A {
var: String

override init() {
     d = "d"
   }
} 

此时满足上面所说的条件,在B类重写的init()方法中不需要调动super.init()

你可能感兴趣的:(Swift中重写`init( )`方法时无需调用`super.init( )`的情况)