Difference between Struct and Class in Swift.

Journey on programming
4 min readJun 18, 2017

--

今天要透過這篇文章來談談swift當中struct與class的差別,順便也翻翻原廠手冊來釐清自己學習盲點,寫下這篇文章以便未來複習的時候可以看啊!這邊我僅會列出自己整理過後的比較點,就不對struct跟class本身的用法去做討論了。

  1. Struct不能有子類別,而Class可以

簡單來說就是Struct不能透過繼承去取得Parent Struct的內容,而Class可以。

程式碼運行沒有問題
程式碼運行會報錯,錯誤為 error: inheritance from non-protocol type ‘SGreeting’

2. Struct是Value Type, Class是Reference Type.

(如果很怕搞混的話,記得RC => Reference type and Class.)

顧名思義,當你透過struct產生一個實體的時候,他是真的複製出一個一模一樣的實體出來給你,而透過Class,其只是單純指向同一塊的記憶體,所以你跟我讀的記憶體位置其實是一樣的,只是看起來是不同的實體而已,所以當這塊記憶體位置的內容被修改之後,你跟我所對應到的值,也會跟著不同囉。

3. Initializer Method.

不管是Class或是Struct, 如果我們希望在創建實體的時候,可以順便帶入初始值,則Struct當中不需自行撰寫init method,當我們去做呼叫的時候,即會呼叫來做初始化屬性的動作。

而Class則沒有這個功能,所以如果我們希望做到帶入初始值,我們必須自行撰寫一個init的方式,並且在其中將自身的屬性指派給帶入的初始值。

Class需要自己寫
Struct自動產生

這個時候你可能會問,那struct裡面可不可以用到init()方法?

答案是可以的,個人覺得會在Struct裡面再寫一次init方式的時候,多半都是為了要去定義external parameter name(外部參數名稱)的時候,才會用到。

這邊我順便插播一個東西 — Mutating

預設來說,你不能在value type 所定義的方法中去修改其本身所帶的屬性,例如:struct, enum。 因此如果要做這樣的修改,就必須在func 前面加上mutating, 這個關鍵字的意思就是告訴compiler,我允許這個function去修改本身自帶的property, 在function運行完之後,本身自帶的property也會跟著改變啦!

大概以上幾點的差別,如果還是很容易搞混的話,建議大家可以開一個playground,實際的去體會看看其中的差別~~但是總歸一個大方向,Struct用來儲存較簡單的資料,而Class則是用來儲存較複雜的資料與操作這些資料!

以上內容跟大家分享,如果有任何疑問歡迎留言!

圖片來自google search, 如果有侵權疑慮請來信告知,謝謝!

--

--

Journey on programming
Journey on programming

Written by Journey on programming

Software Developer at 91APP. If you like my articles, please clap and follow me on Medium. Never stay still, never plateau!

No responses yet