Swift Class V.S Struct

22/11/2017


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 絕對比較方便。

Share
© 2017  complain by GREASO WANG.
Powered by Webnode
Create your website for free! This website was made with Webnode. Create your own for free today! Get started