构造方法(Initialization)
Swift 中构造方法无需返回值,系统默认实现返回self。
Swift初始化方法需要保证类型的所有属性都被初始化
1 | init() { |
构造参数
1 | struct Celsius { |
可选属性类型
可选类型在声明的时候默认为nil
1 | class SurveyQuestion { |
构造过程中常量属性的修改
可以在构造函数中修改常量属性的值,一旦赋值,将不可更改
默认构造器
结构体的逐一成员构造器
值类型的构造器代理
构造器可以通过调用其它构造器来完成实例的部分构造过程。这一过程称为构造器代理,它能减少多个构造器间的代码重复。
如果为值类型构造器自定义了一个构造器,将不能使用默认构造器(结构体将不能使用逐一构造器)
如果想使用?把自定义构造器写在扩展中。
类的继承和构造过程
子类完成初始化必须调用父类初始化方法
指定构造器和便利构造器
1 | init(parameters) { |
1 | convenience init(parameters) { |
类的构造器代理规则
指定构造器必须向上代理
遍历构造器必须横向代理
构造器继承和重写
“在某个类的子类中,初始化方法里语句的顺序并不是随意的,我们需要保证在当前子类实例的成员初始化完成后才能调用父类的初始化方法:”
1 | class Cat { |
可失败构造器
类、结构体、枚举在构造过程中可能失败,如传入参数不符合要求。
为了处理这种构造过程中可能出现的失败的情况,可以在类、结构体、枚举中添加一个或多个可失败的构造器,
init?
1 | struct Animal { |
必要构造器
1 | class SomeClass { |