Swift學(xué)習(xí)_基本語法之構(gòu)造函數(shù)&析構(gòu)函數(shù)

Swift

1. 構(gòu)造函數(shù)

構(gòu)造函數(shù)是用來初始化對(duì)象的,為對(duì)象的屬性設(shè)置初始值

1.系統(tǒng)默認(rèn)提供了init構(gòu)造函數(shù)
class Person{

    var name:String = "張三"
    var age:Int = 18
}

var person = Person()
print(person.name)      // 打印   張三
print(person.age)      // 打印   18
2.重寫的init構(gòu)造函數(shù)(override)
class Person2:NSObject{

    var name:String
    var age:Int

    // 重寫構(gòu)造函數(shù)
    override init(){
    
        name = "HarrySun"
        age = 21
        super.init()
    }
}

var person2 = Person2()     // 此時(shí)就調(diào)用了重寫的init構(gòu)造函數(shù)
print(person2.name)      // 打印   HarrySun
print(person2.age)      // 打印   21
3.重載構(gòu)造函數(shù)

** 一個(gè)類中可以定義多個(gè)構(gòu)造函數(shù),與構(gòu)造函數(shù)名字相同,但是參數(shù)個(gè)數(shù)、參數(shù)名字、類型和返回值不同,稱為構(gòu)造函數(shù)的重載**

class Person3{

    var name:String
    var age:Int

    init(name:String,age:Int) {
        self.name = name
        self.age = age
    }
}

var person3 = Person3(name:"小花",age:12)

print(person3.name)     // 打印   小花
print(person3.age)     // 打印   12
4.制定構(gòu)造函數(shù)

** 在子類構(gòu)造過程中,要先調(diào)用父類構(gòu)造函數(shù)初始化父類的存儲(chǔ)類型**

class Person4{

    var name:String

    // 這是制定構(gòu)造函數(shù)
    init(name:String) {
    
        self.name = name
    }
}
5.便利構(gòu)造函數(shù)

** 便利構(gòu)造函數(shù)是調(diào)用同一個(gè)類中制定構(gòu)造函數(shù),并未其參數(shù)提供默認(rèn)值,起到輔助作用,用convenience修飾**

class Student{

    var name:String
    init(name:String) {
        self.name = name
    }

    convenience init(){
    
        self.init(name:"小明")
    }
}

let stu1 = Student(name:"HarrySun") //調(diào)用制定構(gòu)造函數(shù)
let stu2 = Student() //調(diào)用便利構(gòu)造函數(shù)

print(stu1.name)    // 打印   HarrySun
print(stu2.name)    // 打印   小明

2.析構(gòu)函數(shù)

析構(gòu)函數(shù)與構(gòu)造函數(shù)相反,在一個(gè)類的實(shí)例被釋放之前,析構(gòu)函數(shù)被調(diào)用,析構(gòu)函數(shù)使用關(guān)鍵字deinit來定義,類似于初始化函數(shù)用的init來定義,析構(gòu)函數(shù)沒有返回值,沒有參數(shù),不需要小括號(hào),所以不能重載,每一個(gè)類最多有一個(gè)析構(gòu)函數(shù)

class Circle{

    let π = 3.1415926
    var r:Double

    // 定義一個(gè)制定構(gòu)造函數(shù)
    init(r:Double) {
    
        self.r = r
    }

    // 定義一個(gè)析構(gòu)函數(shù)
    deinit {
        print("釋放之前調(diào)用該析構(gòu)函數(shù)")
    }
}

// 初始化一個(gè)可選性的圓實(shí)例,表示可以為nil
var circle:Circle? = Circle(r:3)
print("圓的面積為:\(2 * circle!.π * circle!.r * circle!.r)")

// 當(dāng)實(shí)例為nil時(shí),會(huì)調(diào)用析構(gòu)函數(shù)
circle = nil
circle = Circle(r:10)
print("圓的周長:\(2 * circle!.π * circle!.r)")

上方代碼運(yùn)行結(jié)果

小結(jié)

代碼已上傳至git:
--> 傳送門:Swift_基本語法

附錄

查看完整專欄《Swift學(xué)習(xí)》

有問題歡迎指正以及相互探討 —— CoderSun

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容