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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 796评论 0 0
  • 下标脚本 下标脚本 可以定义在类、结构体和枚举这些目标中,可以认为是访问集合(collection),列表(li...
    cht005288阅读 473评论 0 0
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 2,337评论 1 6
  • 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个...
    莽原奔马668阅读 708评论 0 3
  • 今年的正月显得格外仓促而漫长,奔走于老家与白银之间,身体的疲惫不堪自不必说,单是内心的思念和悲伤更是深重的折磨着人...
    踏雪寻梅duan阅读 599评论 0 0