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