練習筆記#研究Swift 的 Value type 和 Reference type

在閱讀完Peter 大神和Swift 官方文章後,來分享一下看自己是否完全了解value type and reference type 的不同。平常會用到的Int、Float、 Double、String 、Array等都是 struct 定義的 value type,那該如何分辨哪些是Value type 還是Reference type呢?

懶人包

Value type

從原本的資料複製產生新的資料,會讓記憶體多佔了一份空間。

Ex: 你可以將每雙鞋子想像成一個 value type。這意味著每雙鞋子都是獨立的,有自己的屬性,比如顏色、大小和價格。當你買了一雙新鞋時,這雙鞋子就是一個新的 value,它獨立存在,不會受到其他鞋子的影響。

Struct、Tuple、Enum、Array、Int、 Float、 Double、 String

Reference type

Ex: 假設你和你的朋友共同買了一雙運動鞋,這雙鞋子是紅色的、大小是 10 號,價格是 1000元。你和你的朋友兩個都可以使用這雙鞋子,因為你們共同擁有它。如果你將這雙鞋子塗成了藍色,那麼無論是你還是你的朋友都會看到這雙鞋子變成了藍色。

Class、Closure、Function

實驗Value type

struct 定義的型別是 value type

struct Mazda {
var year = 2019
var color = "white"
}
var Mazda3 = Mazda()
var Mazda6 = Mazda3
Mazda3.year = 2023
Mazda3.year
Mazda6.year

結果

struct 型別的 Mazda3和 Mazda6佔據不同記憶體空間,互不干擾
var year = 2019
var color = "white"
}

這裡使用var 宣告此變數的值可能會變動。

如果用 let 宣告表示顏色(color)

value type 具有以下特性:

  1. 獨立性:每個 value type 的實例都是獨立的,它們在記憶體中有自己的存儲位置,互不影響。

2. 值的複製:當你將一個 value type 的實例指派給另一個變數時,實際上是將值複製一份給新的變數,而不是共享同一個實例。

3. 不可變性:如果一個 value type 的屬性被宣告為常數(用 let 關鍵字),則這些屬性是不可變的,無法修改它們的值。

4. 簡單:value type 通常是相對簡單的數據結構,它們用於保存較小的數據,如整數、浮點數、布林值、字串等。

總結來說,value type 提供了一種安全且可靠的方式來管理和傳遞數據,它們的獨立性和不可變性確保了程式碼的穩定性和可靠性。

class 定義的型別是 reference type

再來是reference type 的代表,class 的例子。

--

--