#Swift 類別
本教程屬於 Swift 系列教程
類別與結構相似,但也有一些關鍵的差異。
使用以下語法定義類別:
1 | class Dog { |
在類別內部可以定義儲存屬性:
1 | class Dog { |
類別的定義定義了一個型別。要使用此型別創建新實例,可以使用以下語法:
1 | let roger = Dog() |
一旦你有了實例,可以使用點語法來訪問其屬性:
1 | let roger = Dog() |
相同的點語法用於更新屬性值:
1 | roger.age = 9 |
一個重要的區別是類別是引用型別,而結構(和列舉)是值型別。
這意味著將一個類別實例賦值給另一個變數不會複製該實例。兩個變數指向同一個實例:
1 | class Dog { |
這也意味著我們可以使用 let
定義對類別的引用,並且可以更改其屬性,如上面的示例所示。
我們可以創建類別的實例,稱為物件。
與結構一樣,類別可以具有屬性、方法等等。
與結構不同的是,我們 必須 定義一個初始化方法來在創建實例時初始化其值:
1 | class Dog { |
只有在有初始化方法時,才能聲明屬性而不初始化它們。
請參閱 self
的使用。我們需要它,因為 age
同時是實例屬性和 init(age:)
方法的參數。 self.age
引用了 age
實例屬性。
類別可以有實例方法:屬於類別實例的函數。
1 | class Dog { |
我們還可以有型別方法:
1 | class Dog { |
以 Dog.hello()
調用。
類別允許的一個重要特性是繼承。
一個類別可以從另一個類別繼承所有屬性和方法。
假設我們有一個 Animal
類別。每個動物都有一個年齡:
1 | class Animal { |
並非每一個動物都有一個名字。狗有一個名字。因此我們可以創建一個從 Animal
繼承的 Dog
類別:
1 | class Dog: Animal { |
現在我們必須為這兩個類別添加初始化方法。對於 Dog,完成特定於類別的初始化後,我們可以使用 super.init()
來調用父類初始化方法:
1 | class Animal { |
Animal
現在是一個超類,Dog
是一個子類。
關於類別還有很多要說,但這是一個很好的入門。