任意一构造器初始化完毕后,属性必须都有初始值
1、默认构造器
如果结构体或类的所有属性都有默认值,同时没有自定义的构造器,那么 Swift 会给这些结构体或类提供一个默认构造器(default initializers)。这个默认构造器将简单地创建一个所有属性值都设置为默认值的实例。
let p = Person()
用类直接调用,注意每个属性都有默认值,且没有自定义的构造器
2、逐一成员构造器(ontly结构体)
如果结构体没有提供自定义的构造器,它们将自动获得一个逐一成员构造器。即结构体的存储型属性没有默认值时,既有默认构造器又有逐一成员构造器,换种说法,有默认构造器时肯定有逐一成员构造器
struct MyStruct{
var length: Int?
var width :Int?
}
MyStruct()
MyStruct(length: <#T##Int?#>, width: <#T##Int?#>)
3、自定义构造器
有自定义构造器时就没有默认构造器和逐一成员构造器(结构体)
Init(属性名)
4.指定构造器
和自定义构造器一样
init(parameters) {
statements
}
5、便利构造器
你可以定义便利构造器来调用同一个类中的指定构造器,并为其参数提供默认值。你也可以定义便利构造器来创建一个特殊用途或特定输入值的实例。
你应当只在必要的时候为类提供便利构造器,比方说某种情况下通过使用便利构造器来快捷调用某个指定构造器,能够节省更多开发时间并让类的构造过程更清晰明了。
convenience init(parameters) {
statements
}
6、构造器代理
值类型的构造器代理:直接在构造器中吊用其他构造器代理(self.init)
类的构造器代理规则:
1、指定构造器必须调用其直接父类的的指定构造器。
2、便利构造器必须调用同类中定义的其它构造器。
3、便利构造器必须最终导致一个指定构造器被调用。