Swift類和結構體的選擇
類和結構體的選擇
在你的代碼中,你可以使用類和結構體來定義你的自定義數據類型。
然而,結構體實例總是通過值傳遞,類實例總是通過引用傳遞。這意味兩者適用不同的任務。當你的在考慮一個工程項目的數據構造和功能的時候,你需要決定每個數據構造是定義成類還是結構體。
按照通用的準則,當符合一條或多條以下條件時,請考慮構建結構體:
- 結構體的主要目的是用來封裝少量相關簡單數據值。
- 有理由預計一個結構體實例在賦值或傳遞時,封裝的數據將會被拷貝而不是被引用。
- 任何在結構體中儲存的值類型屬性,也將會被拷貝,而不是被引用。
- 結構體不需要去繼承另一個已存在類型的屬性或者行為。
合適的結構體候選者包括:
-
幾何形狀的大小,封裝一個
width
屬性和height
屬性,兩者均為Double
類型。 -
一定範圍內的路徑,封裝一個
start
屬性和length
屬性,兩者均為Int
類型。 -
三維坐標係內一點,封裝
x
,y
和z
屬性,三者均為Double
類型。
在所有其它案例中,定義一個類,生成一個它的實例,並通過引用來管理和傳遞。實際中,這意味著絕大部分的自定義數據構造都應該是類,而非結構體。