原創(chuàng)文章鞋囊,歡迎轉(zhuǎn)載瞎惫。轉(zhuǎn)載請注明:關(guān)東升的博客
結(jié)構(gòu)體和類的實(shí)例在構(gòu)造過程中會調(diào)用一種特殊的init方法,稱為構(gòu)造函數(shù)瓜喇。構(gòu)造函數(shù)沒有返回值,可以重載乘寒。在多個構(gòu)造函數(shù)重載的情況下矩肩,運(yùn)行環(huán)境可以根據(jù)它的外部參數(shù)名或參數(shù)列表調(diào)用合適的構(gòu)造函數(shù)肃续。
默認(rèn)構(gòu)造函數(shù)
結(jié)構(gòu)體和類在構(gòu)造過程中會調(diào)用一個構(gòu)造函數(shù),即便是沒有編寫任何構(gòu)造函數(shù)始锚,編譯器也會提供一個默認(rèn)的構(gòu)造函數(shù)。下面看示例代碼:
class Rectangle {
var width: Double? = 0.0
var height: Double = 0.0
}
var rect = Rectangle() //創(chuàng)建實(shí)例瞧捌,并調(diào)用默認(rèn)構(gòu)造函數(shù)init()
rect.width = 320.0
rect.height = 480.0
print("長方形:\(rect.width) x \(rect.height)")
Rectangle()表示調(diào)用了某個方法棵里,這個方法就是默認(rèn)構(gòu)造函數(shù)init()姐呐。
事實(shí)上,在Rectangle的定義過程中省略了構(gòu)造函數(shù)曙砂,相當(dāng)于如下代碼:
class Rectangle {
var width: Double? = 0.0
var height: Double = 0.0
init() {
}
}
如果Rectangle是結(jié)構(gòu)體,則它的定義如下:
struct Rectangle {
var width: Double = 0.0
var height: Double = 0.0
}
而結(jié)構(gòu)體Rectangle的默認(rèn)構(gòu)造函數(shù)與類Rectangle的默認(rèn)構(gòu)造函數(shù)是不同的鸠澈,相當(dāng)于如下代碼:
struct Rectangle {
var width: Double = 0.0
var height: Double = 0.0
init() {
}
init(width: Double, height: Double) { //有參數(shù)的構(gòu)造函數(shù)
self.width? = width
self.height? = height
}
}
要調(diào)用哪個構(gòu)造函數(shù)是根據(jù)傳遞的參數(shù)名和參數(shù)類型決定的。