類(lèi)和結(jié)構(gòu)體在實(shí)例創(chuàng)建時(shí),必須為所有存儲(chǔ)型屬性設(shè)置合適的初始值。存儲(chǔ)型屬性的值不能處于一個(gè)未知的狀態(tài)。
你可以在構(gòu)造器中為存儲(chǔ)型屬性賦初值,也可以在定義屬性時(shí)為其設(shè)置默認(rèn)值。以下章節(jié)將詳細(xì)介紹這兩種方法。
注意:
當(dāng)你為存儲(chǔ)型屬性設(shè)置默認(rèn)值或者在構(gòu)造器中為其賦值時(shí),它們的值是被直接設(shè)置的,不會(huì)觸發(fā)任何屬性觀(guān)測(cè)器(property observers)。
構(gòu)造器在創(chuàng)建某特定類(lèi)型的新實(shí)例時(shí)調(diào)用。它的最簡(jiǎn)形式類(lèi)似于一個(gè)不帶任何參數(shù)的實(shí)例方法,以關(guān)鍵字init命名。
下面例子中定義了一個(gè)用來(lái)保存華氏溫度的結(jié)構(gòu)體Fahrenheit,它擁有一個(gè)Double類(lèi)型的存儲(chǔ)型屬性temperature:
struct Fahrenheit {
var temperature: Double
init() {
temperature = 32.0
}
}
var f = Fahrenheit()
println("The default temperature is \(f.temperature)° Fahrenheit")
// 輸出 "The default temperature is 32.0° Fahrenheit”
這個(gè)結(jié)構(gòu)體定義了一個(gè)不帶參數(shù)的構(gòu)造器init,并在里面將存儲(chǔ)型屬性temperature的值初始化為32.0(華攝氏度下水的冰點(diǎn))。
如前所述,你可以在構(gòu)造器中為存儲(chǔ)型屬性設(shè)置初始值;同樣,你也可以在屬性聲明時(shí)為其設(shè)置默認(rèn)值。
注意:
如果一個(gè)屬性總是使用同一個(gè)初始值,可以為其設(shè)置一個(gè)默認(rèn)值。無(wú)論定義默認(rèn)值還是在構(gòu)造器中賦值,最終它們實(shí)現(xiàn)的效果是一樣的,只不過(guò)默認(rèn)值跟屬性構(gòu)造過(guò)程結(jié)合的更緊密。使用默認(rèn)值能讓你的構(gòu)造器更簡(jiǎn)潔、更清晰,且能通過(guò)默認(rèn)值自動(dòng)推導(dǎo)出屬性的類(lèi)型;同時(shí),它也能讓你充分利用默認(rèn)構(gòu)造器、構(gòu)造器繼承(后續(xù)章節(jié)將講到)等特性。
你可以使用更簡(jiǎn)單的方式在定義結(jié)構(gòu)體Fahrenheit時(shí)為屬性temperature設(shè)置默認(rèn)值:
struct Fahrenheit {
var temperature = 32.0
}