Difference between Struct and Class in Swift.
今天要透過這篇文章來談談swift當中struct與class的差別,順便也翻翻原廠手冊來釐清自己學習盲點,寫下這篇文章以便未來複習的時候可以看啊!這邊我僅會列出自己整理過後的比較點,就不對struct跟class本身的用法去做討論了。
- Struct不能有子類別,而Class可以
簡單來說就是Struct不能透過繼承去取得Parent Struct的內容,而Class可以。
2. Struct是Value Type, Class是Reference Type.
(如果很怕搞混的話,記得RC => Reference type and Class.)
顧名思義,當你透過struct產生一個實體的時候,他是真的複製出一個一模一樣的實體出來給你,而透過Class,其只是單純指向同一塊的記憶體,所以你跟我讀的記憶體位置其實是一樣的,只是看起來是不同的實體而已,所以當這塊記憶體位置的內容被修改之後,你跟我所對應到的值,也會跟著不同囉。
3. Initializer Method.
不管是Class或是Struct, 如果我們希望在創建實體的時候,可以順便帶入初始值,則Struct當中不需自行撰寫init method,當我們去做呼叫的時候,即會呼叫來做初始化屬性的動作。
而Class則沒有這個功能,所以如果我們希望做到帶入初始值,我們必須自行撰寫一個init的方式,並且在其中將自身的屬性指派給帶入的初始值。
這個時候你可能會問,那struct裡面可不可以用到init()方法?
答案是可以的,個人覺得會在Struct裡面再寫一次init方式的時候,多半都是為了要去定義external parameter name(外部參數名稱)的時候,才會用到。
這邊我順便插播一個東西 — Mutating
預設來說,你不能在value type 所定義的方法中去修改其本身所帶的屬性,例如:struct, enum。 因此如果要做這樣的修改,就必須在func 前面加上mutating, 這個關鍵字的意思就是告訴compiler,我允許這個function去修改本身自帶的property, 在function運行完之後,本身自帶的property也會跟著改變啦!
大概以上幾點的差別,如果還是很容易搞混的話,建議大家可以開一個playground,實際的去體會看看其中的差別~~但是總歸一個大方向,Struct用來儲存較簡單的資料,而Class則是用來儲存較複雜的資料與操作這些資料!
以上內容跟大家分享,如果有任何疑問歡迎留言!
圖片來自google search, 如果有侵權疑慮請來信告知,謝謝!