Swift

构造器调用链的规则

Swift对构造器之间的调用链制定了如下3条规则:
1.  子类构造器必须调用直接父类的指定构造器(如果有父类)
2.  便利构造器必须调用同一个类中得其他构造器
3.  便利构造器调用的构造器链的最终节点必须是制定构造器
简化记忆为:
1.  指定构造器总是向上代理(调用父类构造器)
2.  便利构造器总是必须横向代理(调用当前类的其他构造器)
类的构造器链

两段式构造

     1、类的构造需要两个阶段:
            第一阶段:
            1.  程序调用子类的某个构造器;
            2.  为实例分配内存,此时实例的内存还没有被初始化;
            3.  指定构造器确保子类定义的所有实例存储属性都已经被赋值;
            4.  指定构造器将调用父类的构造器,完成父类定义的实例存储属性的初始化
            5.  沿着调用父类构造器的构造器链一直往往上执行,直到达到构造器链的最顶部

安全检查

安全检查1:指定构造器必须先初始化当前类中定义的实例存储属性,然后才能向上调用父类构造器
安全检查2:指定构造器必须先向上调用父类构造器,然后才能对继承得到的属性赋值
安全检查3:便利构造器必须先调用同一个类的其他构造器,然后才能进行赋值
安全检查4:构造器在第一阶段完成之前,不能调用实例方法,不能读取实例属性
建议:为实例存储属性指定初始值

扩展的特性

1.  使用扩展添加属性、方法、可变方法、构造器、下标、嵌套类型
2.  可以使一个已有类型符合一个或者多个协议
3.  Swift的扩展与Objective-C的类目(category)类似,只是Swift中的扩展没有名字
4.  扩展并不是派生子类,因此不支持重写

扩展可以添加3种属性

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

推荐阅读更多精彩内容

  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 4,127评论 0 0
  • 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个...
    莽原奔马668阅读 3,928评论 0 3
  • 下标脚本 下标脚本 可以定义在类、结构体和枚举这些目标中,可以认为是访问集合(collection),列表(li...
    cht005288阅读 3,251评论 0 0
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 5,272评论 2 4
  • 简介 *自定义构造过程 *默认构造器 *值类型的构造器代理 *类的继承和构造过程 *可失败构造器 *必需构造器 *...
    FishSha阅读 2,087评论 0 0