Swift Class V.S Struct

Class : 傳址 ( Call by reference )
Struct : 傳值 ( Call by value )

我分別創造了一個 class 叫 Apple 以及 struct 叫 Banana 並各宣告一個 count 屬性。

宣告了 appleA 將 Apple 實體化,並宣告 appleB = appleA
再將 appleA 的 count 由原本預設的 0 改為 10
同樣宣告 bananaA 將 Banana 實體化,並宣告 BananaB = BananaA
也將 bananaA 的 count 由原本預設的 0 改為 10
分別 log 出 appleB、BananaB 來看看結果

我們可以發現 appleB 的 count 同樣被改變了!!
而 bananaB 仍保持原先預設值 0
我們具體說一下原因
在 swift 語法中 class 屬於 call by reference ,將變數指向記憶體位址 ,
因此範例中的 appleB 其實也是指向 appleA 的 記憶體位址 ,
而從這個記憶體位址取得的值,就是被 appleA . count = 10 所更新的值。
而 struct 則屬於 call by value ,
實體化變數時會將對象的值複製到新分配的記憶體位置,
因此產生一模一樣但各自「 獨立 」的物件 。
這樣也許沒那麼清楚,在做點變化說明:

將先前改變 bananaA.count 與 宣告 bananaB 的順序做了調換
Banana 是 call by value ,bananaA 的值被改為 10
當宣告 bananaB 在 bananaA.count 後時,
bananaB 會得到值就會是宣告當下 bananaA 的值,也就是 10。

以上是簡單的實作說明,剛好手邊有個專門練習用的專案
不然 Playground 絕對比較方便。
