練習筆記#研究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
結果
var year = 2019
var color = "white"
}
這裡使用var 宣告此變數的值可能會變動。
如果用 let 宣告表示顏色(color)
value type 具有以下特性:
- 獨立性:每個 value type 的實例都是獨立的,它們在記憶體中有自己的存儲位置,互不影響。
2. 值的複製:當你將一個 value type 的實例指派給另一個變數時,實際上是將值複製一份給新的變數,而不是共享同一個實例。
3. 不可變性:如果一個 value type 的屬性被宣告為常數(用 let
關鍵字),則這些屬性是不可變的,無法修改它們的值。
4. 簡單:value type 通常是相對簡單的數據結構,它們用於保存較小的數據,如整數、浮點數、布林值、字串等。
總結來說,value type 提供了一種安全且可靠的方式來管理和傳遞數據,它們的獨立性和不可變性確保了程式碼的穩定性和可靠性。
class 定義的型別是 reference type
再來是reference type 的代表,class 的例子。