swift 值型別和引用型別

2021-09-06 17:01:34 字數 1383 閱讀 9575

值型別被賦予給乙個變數,常數或者本身被傳遞給乙個函式的時候,實際上操作的是其的拷貝。

在 swift 中,所有的基本型別:

整數(integer)、浮點數(floating-point)、布林值(booleans)、字串(string)、陣列(array)和字典(dictionaries),都是值型別,

並且都是以結構體的形式在後台所實現。

在 swift 中,所有的結構體和列舉都是值型別。這意味著它們的例項,以及例項中所包含的任何值型別屬性,在**中傳遞的時候都會被複製。

swift 中陣列(array)和字典(dictionary)型別均以結構體的形式實現。

然而當陣列被賦予乙個常量或變數,或被傳遞給乙個函式或方法時,其拷貝行為與字典和其它結構體有些許不同。

以下是對於陣列,字典,字串和其它值的拷貝的描述:

在你的**中,拷貝好像是確實是在有拷貝行為的地方產生過。  然而,在 swift 的後台中,只有確有必要,實際(actual)拷貝才會被執行。

swift 管理所有的值拷貝以確保效能最優化的效能, 所以你也沒有必要去避免賦值以保證最優性能。(實際賦值由系統管理優化)

實際上我也不明白..就暫且當陣列和字典在拷貝的時候是引用型別的

引用型別在被賦予到乙個變數、常量或者被傳遞到乙個函式時,操作的是引用,其並不是拷貝。因此,引用的是已存在的例項本身而不是其拷貝。

let teneighty = videomode()

teneighty.resolution = hd

teneighty.interlaced = true

teneighty.name = "1080i"

teneighty.framerate = 25.0

let alsoteneighty = teneighty

alsoteneighty.framerate = 30.0

if teneighty === alsotentighty

請注意「等價於"(用三個等號表示,===) 與「等於"(用兩個等號表示,==)的不同:

「等價於」表示兩個類型別(class type)的常量或者變數引用同乙個類例項。

等於」表示兩個例項的值「相等」或「相同」,判定時要遵照類設計者定義定義的評判標準,因此相比於「相等」,這是一種更加合適的叫法。

然而,結構體例項總是通過值傳遞,類例項總是通過引用傳遞。這意味兩者適用不同的任務。當你在考慮乙個工程專案的資料構造和功能的時候,你需要決定每個資料構造是定義成類還是結構體。

按照通用的準則,當符合一條或多條以下條件時,請考慮構建結構體:

合適的結構體候選者包括:

在所有其它案例中,定義乙個類,生成乙個它的例項,並通過引用來管理和傳遞。實際中,這意味著絕大部分的自定義資料構造都應該是類,而非結構體。

Swift值型別和引用型別

的乙份,比如結構體 struct 列舉 enum 元組 tuple 都是值型別。第二種是引用型別,該型別的例項共享資料唯一的乙份副本 在native層面說的話,就是該型別的每個例項都指向記憶體中的同乙個位址 比如類 class 就是引用型別。在這篇文章中,我們將深入 值型別和引用型別的使用價值,以及...

Swift 值型別和引用型別

swift中有兩種型別 值型別 value type 引用型別 reference type 在swift中,所有的基本型別 整型 int 浮點型 float 布林型別 boolean 字串型別 string 陣列 array 字典 dictionary 元組 tuple 都是值型別,它們的底層都是...

Swift 中的值型別和引用型別

值型別和引用型別只在之前的面試過程中碰到過,最近學習過程中,在體驗 swift 的物件導向特性的時候,在 struct 和 class 中再次碰到了這個問題,說一說自己的收穫吧。值型別和引用型別在 oc 裡面理解起來應該更方便。在 oc 中,我們例項化物件的時候有兩種方式。一種是需要在變數名前面加個...