任意一構造器初始化完畢后诈茧,屬性必須都有初始值
1、默認構造器
如果結構體或類的所有屬性都有默認值胸梆,同時沒有自定義的構造器龄章,那么 Swift 會給這些結構體或類提供一個默認構造器(default initializers)。這個默認構造器將簡單地創(chuàng)建一個所有屬性值都設置為默認值的實例撕予。
let p = Person()
用類直接調(diào)用鲫惶,注意每個屬性都有默認值,且沒有自定義的構造器
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鸟废、便利構造器
你可以定義便利構造器來調(diào)用同一個類中的指定構造器猜敢,并為其參數(shù)提供默認值。你也可以定義便利構造器來創(chuàng)建一個特殊用途或特定輸入值的實例盒延。
你應當只在必要的時候為類提供便利構造器缩擂,比方說某種情況下通過使用便利構造器來快捷調(diào)用某個指定構造器,能夠節(jié)省更多開發(fā)時間并讓類的構造過程更清晰明了添寺。
convenience init(parameters) {
statements
}
6胯盯、構造器代理
值類型的構造器代理:直接在構造器中吊用其他構造器代理(self.init)
類的構造器代理規(guī)則:
1、指定構造器必須調(diào)用其直接父類的的指定構造器计露。
2博脑、便利構造器必須調(diào)用同類中定義的其它構造器。
3票罐、便利構造器必須最終導致一個指定構造器被調(diào)用叉趣。
123.png