【Swift】學習筆記(八)——類和結構體

來源:互聯網
上載者:User

標籤:false   star   而不是   dcl   應該   繼承   案例   frame   變數   

1、類和結構體的定義

<pre name="code" class="html">struct Resolution {    var width = 0    var height = 0}class VideoMode {    var resolution = Resolution()    var interlaced = false    var frameRate = 0.0    var name: String?    //值為可選String類型的name}



類:keywordclass,  struct:結構體


2、建立類和結構體的執行個體(其它語言中稱執行個體為對象。)

let someResolution = Resolution()let someVideoMode = VideoMode()

咦,非常easy啊,怎麼沒有keywordnew呢。。

 和將函數賦值給變數是一樣的啊。是的。

就這麼簡單。無需keyword。


3、結構體有一個逐屬性構造器,類木有。

let vga = Resolution(width:640, height: 480)


4、使用. 點 來訪問屬性,包含訪問和賦值。

someVideoMode.resolution.width = 1280


5、結構體是實值型別,類是參考型別。


6、類的恒等運算子 等價於(===),不等價於(!==)推斷兩個變數或常量是否引用了同一個執行個體


7、指標無需特定的(*)來表示是一個記憶體位址引用,也不須要特定的符號(->)來訪問。它和訪問屬性是一樣的 用 (.)點。


8、類和結構體的差別

Swift 中類和結構體有非常多共同點。共同處在於:

  • 定義屬性用於儲存值
  • 定義方法用於提供功能
  • 定義附屬指令碼用於訪問值
  • 定義構造器用於產生初始化值
  • 通過擴充以添加預設實現的功能
  • 符合協議以對某類提供標準功能

與結構體相比,類還有例如以下的附加功能:

  • 繼承同意一個類繼承還有一個類的特徵
  • 類型轉換同意在執行時檢查和解釋一個類執行個體的類型
  • 解構器同意一個類執行個體釋放不論什麼其所被分配的資源
  • 引用計數同意對一個類的多次引用

9、類和結構體的選擇

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

  • 結構體的主要目的是用來封裝少量相關簡單資料值。
  • 有理由估計一個結構體執行個體在賦值或傳遞時,封裝的資料將會被拷貝而不是被引用。

  • 不論什麼在結構體中儲存的實值型別屬性,也將會被拷貝,而不是被引用。
  • 結構體不須要去繼承還有一個已存在類型的屬性或者行為。

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

  • 幾何形狀的大小。封裝一個width屬性和height屬性,兩者均為Double類型。
  • 一定範圍內的路徑,封裝一個start屬性和length屬性,兩者均為Int類型。
  • 三維座標系內一點,封裝xyz屬性。三者均為Double類型。

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






【Swift】學習筆記(八)——類和結構體

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.