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