Swift开发swift

Swift

2015-09-16  本文已影响218人  HenryM

构造器调用链的规则

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.  类型计算属性
上一篇下一篇

猜你喜欢

热点阅读