Swift 將為所有屬性已提供默認值的且自身沒有定義任何構造器的結構體或基類,提供一個默認的構造器。這個默認構造器將簡單的創(chuàng)建一個所有屬性值都設置為默認值的實例。
下面例子中創(chuàng)建了一個類ShoppingListItem,它封裝了購物清單中的某一項的屬性:名字(name)、數(shù)量(quantity)和購買狀態(tài) purchase state。
class ShoppingListItem {
var name: String?
var quantity = 1
var purchased = false
}
var item = ShoppingListItem()
由于ShoppingListItem類中的所有屬性都有默認值,且它是沒有父類的基類,它將自動獲得一個可以為所有屬性設置默認值的默認構造器(盡管代碼中沒有顯式為name屬性設置默認值,但由于name是可選字符串類型,它將默認設置為nil)。上面例子中使用默認構造器創(chuàng)造了一個ShoppingListItem類的實例(使用ShoppingListItem()形式的構造器語法),并將其賦值給變量item。
除上面提到的默認構造器,如果結構體對所有存儲型屬性提供了默認值且自身沒有提供定制的構造器,它們能自動獲得一個逐一成員構造器。
逐一成員構造器是用來初始化結構體新實例里成員屬性的快捷方法。我們在調(diào)用逐一成員構造器時,通過與成員屬性名相同的參數(shù)名進行傳值來完成對成員屬性的初始賦值。
下面例子中定義了一個結構體Size,它包含兩個屬性width和height。Swift 可以根據(jù)這兩個屬性的初始賦值0.0自動推導出它們的類型Double。
由于這兩個存儲型屬性都有默認值,結構體Size自動獲得了一個逐一成員構造器init(width:height:)。 你可以用它來為Size創(chuàng)建新的實例:
struct Size {
var width = 0.0, height = 0.0
}
let twoByTwo = Size(width: 2.0, height: 2.0)