本教程屬於 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、數組和字典等都是結構體。