前言
過去在讀了對於類別(class)與結構(struct)相關的文章裡,有提過類別與結構的相似與各自的特色,本篇文章會先以描述此兩者的基本概念以及在需要的時候,進行比較,並依照閱讀過的資料稍作整理,最後總結類別與結構的使用需有哪些注意。
正文
就以基本面來說,類別跟結構都會有一些共同的東西:
- 屬性(
property
):用於儲存值 - 方法(
method
):用於提供功能 - 下標(
subscript
):用於存取值 - 建構器(
initializer
):用於生成初始化值 - 擴展(
extension
):增加預設實作的功能 - 協定(
protocol
):對某類別提供標準功能
而上述這些東西因為內容、功能各異,將來會有一些相關的說明。
然而類別(class)比起結構(struct)又多出一些東西:
- 繼承(
inherit
):類別可以繼承另一個類別的內容 - 解構器(
deinitializer
)允許一個類別實體釋放任何其所被分配的資源 - 型別轉換允許在執行時檢查和轉換一個類別實體的型別
- 參考計數允許對一個類別實體的多次參考(資料來源:Swift起步走)
上述這些東西大抵上是我們在字面上所見的異同,不過就樣態上來說,類別與結構會長得像下面兩者:

class、struct裡面可以裝類別的屬性(property)、方法(method)、其他可以定義的特性。
剛開始接觸class、struct的人可能比較不熟悉屬性、方法這兩個詞:
1.類別、結構內的常數、變數,便會被稱為是屬性(property),如下:

像name、height就會是Human裡面的屬性。
2.類別、結構裡面的函式,即稱為方法(method):

如func的部分,我設置了一個會回傳睡覺的函式,在實體化為Adam之後,才可以使用Adam來呼叫他下面的方法,即.sleep( )
其他的內容,如下標(subscript)、建構器(intialize)、擴展(extension)、協定(protocol)等內容較為複雜,之後文章會陸續提及。
總之,屬性與方法是類別與結構比較容易理解的內容,而要使用一個在class或struct裡面的函數,必須經過實體化的過成,生成一個實例(instance),如下

就前一個例子來說,我們制定了一個Human的struct,但實際上要取用這個Human裡面的東西,無論是屬性(property)或方法(method),都要經過 let 某個東西 =類別或結構名稱()這個過程。
才會生成一個實際使用的實體(instance)
而這時候,我們就可以對Adam為所欲為了,不管是要叫他睡覺也好或啥鬼的。
綜合上述,這篇大抵上提到了幾個內容:
- 類別(class)、結構(struct)的相同、相異處(因為內容比較繁雜,所以之後另開篇章描述)
- 在類別、結構裡面的常數(constant)、變數(variable)就是屬性(property),而函式(function)被稱為方法(method)
- 我們建構了class、struct裡面的屬性、方法後,如果要使用它,就必須要把它變成實體(instance),才能實際的使用其中定義的屬性與方法。
補充:如何命名?
大駝峰式命名(upper camel case):類別(class)、結構(struct)大多以此類方式命名。
ex: TerminatorGame、DragonMother、TheWitcher….
:也就是說,每一個有意義的單字的開頭都會是大寫
小駝峰式命名(lower camel case):屬性(property)、方法(method)、常數constant、變數(variable)、函式(function)大多以此類方式命名。
ex: gameComment、playGame….
:第一個字開頭是小寫,爾後有意義的單字才是大寫