1. 構(gòu)造函數(shù)
構(gòu)造函數(shù)是用來初始化對象的,為對象的屬性設(shè)置初始值
1.系統(tǒng)默認提供了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() // 此時就調(diào)用了重寫的init構(gòu)造函數(shù)
print(person2.name) // 打印 HarrySun
print(person2.age) // 打印 21
3.重載構(gòu)造函數(shù)
** 一個類中可以定義多個構(gòu)造函數(shù)否彩,與構(gòu)造函數(shù)名字相同,但是參數(shù)個數(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ù)初始化父類的存儲類型**
class Person4{
var name:String
// 這是制定構(gòu)造函數(shù)
init(name:String) {
self.name = name
}
}
5.便利構(gòu)造函數(shù)
** 便利構(gòu)造函數(shù)是調(diào)用同一個類中制定構(gòu)造函數(shù),并未其參數(shù)提供默認值译红,起到輔助作用预茄,用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òu)函數(shù)被調(diào)用耻陕,析構(gòu)函數(shù)使用關(guān)鍵字deinit來定義,類似于初始化函數(shù)用的init來定義刨沦,析構(gòu)函數(shù)沒有返回值诗宣,沒有參數(shù),不需要小括號想诅,所以不能重載召庞,每一個類最多有一個析構(gòu)函數(shù)
class Circle{
let π = 3.1415926
var r:Double
// 定義一個制定構(gòu)造函數(shù)
init(r:Double) {
self.r = r
}
// 定義一個析構(gòu)函數(shù)
deinit {
print("釋放之前調(diào)用該析構(gòu)函數(shù)")
}
}
// 初始化一個可選性的圓實例,表示可以為nil
var circle:Circle? = Circle(r:3)
print("圓的面積為:\(2 * circle!.π * circle!.r * circle!.r)")
// 當(dāng)實例為nil時侧蘸,會調(diào)用析構(gòu)函數(shù)
circle = nil
circle = Circle(r:10)
print("圓的周長:\(2 * circle!.π * circle!.r)")