Swift构造器

推荐swiftGG的官方文档翻译《swift构造器》

  • swift类的构造分为两个阶段,第一个阶段是指定构造器初始化所有属性。第二阶段,在初始化所有属性之后,会有指定特殊属性值也就是进一步自定义的机会。两段构造过程让整个构造过程更加安全,表现在能防止属性在初始化之前被访问,也可以防止另一个构造器意外的赋予不同的值。

  • 对于值类型来说,如果不给出构造函数,会默认创建一个注意成员构造器,如果对于类来说,会简单的创建一个所有属性都是默认值的实例。

  • 由于值类型没有继承关系,所以值类型的构造代理都是横向的,代理给自己的其他构造器。也就是可以调用self.init()。

  • 类的构造器代理:
    指定构造器:负责初始化类中提供的所有存储类型的属性(只负责当前类,不负责父类),向上代理,也就是在初始化当前类属性之前必须调用父类的指定构造器。

init(parameter){
  //初始化存储属性
}

便利构造器:辅助构造器,负责在初始化所有存储属性之后创建一个特殊用途或指定输入值得实例,他只能横向代理,也就是调用当前类的构造器

convenience init(parameter){
  //初始化存储属性
}
  • 构造器的继承,如果一个子类的指定构造器未调用父类的指定构造器,会在结尾隐士添加super.init(),如果你在子类构造器里面修改了父类构造器的属性,则会报错,必须手动把super.init()添加到最前面。

  • 子类的构造器只能调用父类的指定构造器不能调用父类的便捷构造器。

  • 如果子类没有定义任何指定构造器,则将自动继承父类所有的指定构造器,如果子类提供了所有的父类置顶构造器的定义--无论是通过上规则继承下来的还是提供自定义实现,它都将自动继承父类所有的便利构造器。

你可能感兴趣的:(Swift构造器)