美文网首页
swift构造器

swift构造器

作者: 简熠 | 来源:发表于2017-12-14 16:53 被阅读11次

指定构造器

初始化类中提供的所有属性,并根据父类链往上调用父类的构造器来实现父类的初始化。

最终都是通过指定构造器初始化对象,保证每个储值属性都有值

init(parameters) {
    statements
}

便利构造器

次要的、辅助型的构造器

convenience init(parameters) {
    statements
}

  • 指定构造器必须总是向上代理
  • 便利构造器必须总是横向代理,并且最终必须导致一个指定构造器被调用
构造器的代理关系示意图
两段构造过程

类似OC:

  • 第1阶段,每个存储型属性被引入它们的类指定一个初始值。
  • 第2阶段,它给每个类一次机会,在新实例准备使用之前进一步定制它们的储值属性。

编辑器4种安全检查

  • 1.子类必须先保证自己新增的属性初始化完成,之后才能代理给父类
  • 2.指定构造器必须先向上代理调用父类构造器,然后再为继承的属性设置新值(否则该值会被父类覆盖)
  • 3.便利构造器必须先代理调用本类中的其它构造器,然后再为任意属性赋新值(否则该值会被本类指定构造器覆盖)
  • 4.构造器在第1阶段构造完成之前,不能调用任何实例方法,不能读取任何实例属性的值,不能引用self作为一个值

构造器的继承和重写

子类默认情况下不会继承父类的构造器,以下2种情况会继承父类:

假设子类新属性都有默认值

  • 1.如果子类没有定义任何指定构造器,它将自动继承所有父类的指定构造器。
  • 2.子类实现了所有父类的指定构造器(无论是情况1,还是重写了所有父类的指定构造器),它将自动继承所有父类的便利构造器。
构造器的代理关系示意图
注意 :

子类可以在初始化时修改继承来的变量属性,但是不能修改继承来的常量属性。

可失败构造器 init? init!

一个类、结构体或枚举类型的对象,在构造过程中有可能失败,则为其定义一个可失败构造器。这里所指的“失败”是指,如给构造器传入无效的参数值,或缺少某种所需的外部资源,又或是不满足某种必要的条件等。

可失败构造器的参数名和参数类型,不能与其它非可失败构造器的参数名,及其参数类型相同。

必须构造器

required init() {
        // 构造器的实现代码
    }

相关文章

  • Swift学习:构造器(中)

    Swift之构造器(上)Swift之构造器(中)Swift之构造器(下) 本篇继续对Swift中的构造器进行介绍,...

  • Swift学习:构造器(下)

    Swift之构造器(上)Swift之构造器(中)Swift之构造器(下) 本篇主要介绍Swift中构造器的一些特殊...

  • Swift学习:构造器(上)

    Swift之构造器(上)Swift之构造器(中)Swift之构造器(下)Swift赋予自定义类型更加丰富的功能,一...

  • swift学习笔记

    1.swift类的构造器 swift构造器有三种:指定构造器和, 便利构造器, 默认构造器. 其中用'conve...

  • Swift类的构造过程

    Swift类的存储型属性必须在构造过程完成后有值,Swift为类提供了两种构造器——指定构造器、便利构造器 指定构...

  • Swift构造器

    推荐swiftGG的官方文档翻译《swift构造器》 swift类的构造分为两个阶段,第一个阶段是指定构造器初始化...

  • Swift5 构造函数知识点总结

    Swift 为类提供了两种构造器,分别是指定构造器和便利构造器。 指定构造器必须总是向上代理(重写、重载) 便利构...

  • Swift面向对象

    创建一个类 类的四种属性 类的构造 swift类构造过程 指定构造器 便利构造器 KVC构造器 实例方法和类方法 ...

  • swift 构造器

    构造器 使用构造器来实现构造过程,构造器可以看做是用来创建新实例的特殊方法,与OC的构造器不同,之前是先调用父类的...

  • swift构造器

    指定构造器 初始化类中提供的所有属性,并根据父类链往上调用父类的构造器来实现父类的初始化。 最终都是通过指定构造器...

网友评论

      本文标题:swift构造器

      本文链接:https://www.haomeiwen.com/subject/jfvkwxtx.html