相比較Objective-C而言,Swift的init初始化方法有三種Designated,Convenience和Required三種形式.類初始化有三個規(guī)則:
①指定的初始化方法必須從其直接父類調(diào)用一個指定的初始化方法.
②便利構(gòu)造方法必須調(diào)用同一類中定義的其他初始化方法.
③便利構(gòu)造方法必須最終會調(diào)用指定的初始化器.

定義Teacher類:
<pre><code>`import UIKit
class Teacher {
var name:String = ""
init(name:String) {
self.name = name
}
convenience init() {
self.init(name: "Teacher")
}
}`</code></pre>
Student子類實現(xiàn):
<pre><code>`class Student: Teacher {
var score:String = ""
// 指定構(gòu)造方法
init(name: String,score: String) {
self.score = score
super.init(name: name)
}
// 便利構(gòu)造方法調(diào)用指定初始化方法
convenience override init(name: String) {
self.init(name:"",score:"")
}
}`</code></pre>
Swift中的類初始化分為兩個階段:
①每一個存儲屬性都由引入它的類分配一個初始值,確定了每個存儲屬性的初始狀態(tài).
②每個類中實例準(zhǔn)備返回之前,進一步更新其存儲的屬性.
兩階段初始化過程使初始化變得安全,同時也給類層次結(jié)構(gòu)中的每個類提供了完全的靈活性。兩階段初始化防止屬性值在初始化前被訪問,并防止屬性值被另一初始化器設(shè)置為不同的值。
Swift編譯過程會進行安全檢查:
①指定構(gòu)造器必須要確保所有被類中提到的屬性在向上調(diào)用父類的指定構(gòu)造器前被初始化,之后才能將其他構(gòu)造任務(wù)移交給父類的中的構(gòu)造器.
②指定構(gòu)造器必須先向上調(diào)用父類中的構(gòu)造器,才能為繼承自父類的屬性賦值.
③便利構(gòu)造器必須線調(diào)用同一個類中的其他構(gòu)造器,再為屬性賦值.
④構(gòu)造器完成之前不能調(diào)用其他任何實例方法,不能讀取實例屬性的值.

對于子類中一定實現(xiàn)的 designated 初始化方法,可以通過required 關(guān)鍵字進行限制,強制子類重寫實現(xiàn).
<pre><code>`class Teacher {
var name:String = ""
required init(name:String) {
//self.name = name
}
convenience init() {
self.init(name: "Teacher")
}
}`</code></pre>
<pre><code>`class Student: Teacher {
var score:String = ""
// 指定構(gòu)造方法
init(name: String,score: String) {
self.score = ""
super.init(name: name)
}
required init(name: String) {
super.init(name: name)
}
}`</code></pre>
參考資料
Apple官方文檔