溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

《從零開始學(xué)Swift》學(xué)習(xí)筆記(Day 42)——構(gòu)造函數(shù)

發(fā)布時(shí)間:2020-02-25 10:09:25 來(lái)源:網(wǎng)絡(luò) 閱讀:257 作者:tony關(guān)東升 欄目:移動(dòng)開發(fā)

原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:關(guān)東升的博客 

在構(gòu)造函數(shù)中可以使用構(gòu)造函數(shù)代理幫助完成部分構(gòu)造工作。類構(gòu)造函數(shù)代理分為橫向代理和向上代理,橫向代理只能在發(fā)生在同一類內(nèi)部,這種構(gòu)造函數(shù)稱為便利構(gòu)造函數(shù)。向上代理發(fā)生在繼承的情況下,在子類構(gòu)造過(guò)程中,要先調(diào)用父類構(gòu)造函數(shù)初始化父類的存儲(chǔ)屬性,這種構(gòu)造函數(shù)稱為指定構(gòu)造函數(shù)。 

構(gòu)造函數(shù)調(diào)用規(guī)則

PersonStudent類示例:

class Person {
    var name: String
    var age: Int
    
    func description() -> String {
        return "\(name) 年齡是: \(age)"
    }
    convenience init () {        //便利構(gòu)造函數(shù)
        self.init(name: "Tony")
        self.age = 18
    }
    convenience init (name: String) {//便利構(gòu)造函數(shù)
        self.init(name: name, age: 18)
    }
    init (name: String, age: Int){       //指定構(gòu)造函數(shù)
        self.name = name
        self.age  = age
    }
}
 
class Student: Person {
    var school: String
    init (name: String, age: Int,school: String) {       //指定構(gòu)造函數(shù)
        self.school = school
        super.init(name: name, age: age)
    }
    convenienceoverride init (name: String,age: Int) {//便利構(gòu)造函數(shù)
        self.init(name: name, age: age, school: "清華大學(xué)")
    }
}
 
let student = Student()
print("學(xué)生: \(student.description())")


構(gòu)造函數(shù)之間的調(diào)用形成了構(gòu)造函數(shù)鏈,如圖所示。

Swift限制構(gòu)造函數(shù)之間的代理調(diào)用的規(guī)則有3條,如下所示。

  • 指定構(gòu)造函數(shù)必須調(diào)用其直接父類的的指定構(gòu)造函數(shù)。從圖可見,Student中的④號(hào)指定構(gòu)造函數(shù)調(diào)用Person中的③號(hào)指定構(gòu)造函數(shù)。

     

  • 便利構(gòu)造函數(shù)必須調(diào)用同一類中定義的其他構(gòu)造函數(shù)。從圖可見,Student中的⑤號(hào)便利構(gòu)造函數(shù)調(diào)用同一類中的④號(hào)便利構(gòu)造函數(shù),Person中的①號(hào)便利構(gòu)造函數(shù)調(diào)用同一類中的②號(hào)便利構(gòu)造函數(shù)。

  • 便利構(gòu)造函數(shù)必須最終以調(diào)用一個(gè)指定構(gòu)造函數(shù)結(jié)束。從圖可見,Student中的⑤號(hào)便利構(gòu)造函數(shù)調(diào)用同一類中的④號(hào)指定構(gòu)造函數(shù),Person中的②號(hào)便利構(gòu)造函數(shù)調(diào)用同一類中的③號(hào)指定構(gòu)造函數(shù)。

 《從零開始學(xué)Swift》學(xué)習(xí)筆記(Day 42)——構(gòu)造函數(shù)

 

歡迎關(guān)注關(guān)東升新浪微博@tony_關(guān)東升。
關(guān)注智捷課堂微信公共平臺(tái),了解最新技術(shù)文章、圖書、教程信息
 《從零開始學(xué)Swift》學(xué)習(xí)筆記(Day 42)——構(gòu)造函數(shù)

更多精品iOSCocos、移動(dòng)設(shè)計(jì)課程請(qǐng)關(guān)注智捷課堂官方網(wǎng)站:http://www.zhijieketang.com
智捷課堂論壇網(wǎng)站:http://51work6.com/forum.php

 

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI