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