构造过程是为了使用某个类、结构体或枚举类型的实例而进行的准备过程,在构造过程中,对每个属性进行了初始值预设和其他必要的准备和初始化工作。
与OC相比,swift的构造函数,不需要返回值。同时,在类和结构体的构造过程中,必须对所有的存储类型属性,包含继承自父类的属性,赋予合适的初始值。存储类型值不能处于一个未知状态。
在对属性进行初始化过程中,有两种方法,第一:使用构造方法,第二:在定义属性时,直接赋予默认值。
当使用构造方法对属性赋值时,不会触发任何的属性观测器。
当一个属性总是使用同一个初始值时,可以通过默认值的形式进行赋值。这样可以使构造器更加简洁,同时也可以自动导出属性的类型。
在构造函数中,是可以对常量属性进行修改的。原则:只要在构造函数结束前,常量值可以确定,就可以在构造函数中任意时间点,对常量进行修改。
可以在构造器中添加参数,参数的数量和类型可以根据具体需要而定。但在每个制定构造器中,都必须对所有属性进行赋值。
当一个类型有多个制定构造器时,主要通过参数名和类型来确定需要调用的构造器。所以构造器的外部参数名显得尤为重要。
跟普通函数一样,系统会自动为每个构造器的参数自动生成一个跟内部名字相同的外部参数名称。就相当于在构造函数前添加了一个“#”。
如果要去掉这种默认结构,可以使用“_”来定义自己喜欢的外部参数名。
注意:在调用构造函数时,必须要通过外部参数名称,否则在编译器会报错。
如果一个属性可以为空时,在定义时,可以将其声明为可选属性类型
如:var string:String?
关于默认构造器:
当结构、枚举、类型中的所有属性都已经提供默认值而且自身没有提供任何构造函数时,系统会自动生成一个构造器,构造器中的所有属性的值都为默认值。
关于指定构造函数和便利构造函数
为了保证类中的所有存储属性,包含继承自父类的属性都有初始值。swift提供了两种构造函数:指定构造函数和便利构造函数。
每个类都必须拥有至少一个制定构造器,在init前添加convenience 关键字,即可声明为便利构造函数。
指定构造函数和便利构造函数之间的调用关系,必须遵循以下三种规则:
1.指定构造函数必须调用其直接父类的构造器,即super.init()
2.便利构造函数必须调用同一类中定义的其他构造器。包含制定构造器和便利构造器。
3.便利构造器最终必须以调用一个制定构造器结束。
总结如下:制定构造器是向上代理。便利构造器是横向代理。
关于继承和重载;
在子类中,是不会自动继承父类的构造器的,需要手动调用,即super。init
重载构造器函数时,不用写override关键字
当要为子类引入任意新属性提供默认值时,须遵循以下两条规则:
1.当子类中没有任何指定构造器,子类将自动继承所有父类的制定构造器。
2.如果子类提供了所有父类制定构造器的实现,不管是通过规则1实现的,还是通过自定义实现的,它将自动继承所有父类的便利构造器。
swift学习笔记(五)构造过程,布布扣,bubuko.com
原文:http://blog.csdn.net/jidiao/article/details/32692067