本教程屬於 Swift 系列。

結構體是 Swift 中一個重要的概念。

Swift 到處都有結構體,甚至內建的類型也是結構體。

我們可以創建結構體的實例,我們稱之為 對象(objects)。

在大多數語言中,對象只能由類創建。Swift 也有類,但是你也可以從結構體中創建對象,官方文件還建議我們更傾向使用結構體,因為它們使用起來更加簡單。

它們是類的輕量版。

一個結構體可以有屬性。 一個結構體可以有方法(函數)。 一個結構體可以定義下標。 一個結構體可以定義初始化器。 一個結構體可以遵從協議。 一個結構體可以被擴展。

類允許的一個重要特性是繼承,所以如果你需要繼承,你需要使用類。

結構體的定義使用如下語法:

struct Dog {

}

結構體內部你可以定義存儲屬性

struct Dog {
 var age = 8
 var name = "Roger"
}

這個結構體定義定義了一個類型。要創建一個具有此類型的新實例,使用以下語法:

let roger = Dog()

一旦你有了一個實例,你可以使用點語法來訪問其屬性:

let roger = Dog()
roger.age
roger.name

相同的點語法也用於更新屬性值:

roger.age = 9

你也可以通過傳遞屬性的值創建結構體實例:

let syd = Dog(age: 7, name: "Syd")
syd.age
syd.name

要這樣做,屬性必須被定義為變量,使用 var,而不是常量(使用 let)。同時,重要的是要尊重那些屬性定義的順序。

結構體可以有實例方法:屬於結構體實例的函數。

struct Dog {
 var age = 8
 var name = "Roger"
 func bark() {
 print("\(name): wof!")
 }
}

我們還有型別方法

struct Dog {
 var age = 8
 var name = "Roger"
 func bark() {
 print("\(name): wof!")
 }
 static func hello() {
 print("Hello I am the Dog struct")
 }
}

通過 Dog.hello() 調用。

結構體是一種值類型。這意味著在傳遞給函數時,或從函數返回時,它們會被複製。當我們將一個變量指向結構體時,也是如此。

這也意味著,如果我們想要更新結構體的屬性,我們必須使用 var 定義它,而不是 let

Swift 中的所有類型都被定義為結構體:Int、Double、String、數組和字典等都是結構體。