Swift中類和結構體

1. 類和結構體對比數組

Swift 中類和結構體有不少共同點:ide

  • 定義屬性用於存儲值
  • 定義方法用於提供功能
  • 定義附屬腳本用於訪問值
  • 定義構造器用於生成初始化值
  • 經過擴展以增長默認實現的功能
  • 符合協議以對某類提供標準功能

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

  • 繼承容許一個類繼承另外一個類的特徵
  • 類型轉換容許在運行時檢查和解釋一個類實例的類型
  • 解構器容許一個類實例釋聽任何其所被分配的資源
  • 引用計數容許對一個類的屢次引用

2. 類和結構體的定義語法spa

類和結構體有着相似的定義方式。咱們經過關鍵字classstruct來分別表示類和結構體,並在一對大括號中定義它們的具體內容,代碼以下:code

class VideoMode{
        var resolution = Resolution()
        var interlaced = false
        var frameRate = 0.0
        var name: String?
    }
    struct Resolution{
        var width = 0
        var height = 0
    }

類和結構體實例,代碼以下:blog

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

3. 結構體類型的成員逐一構造器繼承

結構體類型的成員逐一構造器(Memberwise Initializers for structure Types):全部結構體都有一個自動生成的成員逐一構造器,用於初始化新結構體實例中成員的屬性。新實例中各個屬性的初始值能夠經過屬性的名稱傳遞到成員逐一構造器之中,與結構體不一樣,類實例沒有默認的成員逐一構造器。資源

結構體類型的成員逐一構造器代碼以下:字符串

let someResolution = Resolution(width:640, height:220)

4. 在 Swift 中,全部的結構體和枚舉都是值類型。這意味着它們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞的時候都會被複制。string

實際上,在 Swift 中,全部的基本類型:整數(Integer)、浮點數(floating-point)、布爾值(Booleans)、字符串(string)、數組(array)和字典(dictionaries),都是值類型,而且都是以結構體的形式在後臺所實現。

4.1 類是引用類型

與值類型不一樣,引用類型在被賦予到一個變量、常量或者被傳遞到一個函數時,操做的是引用,其並非拷貝。所以,引用的是已存在的實例自己而不是其拷貝。

5. 恆等運算符

由於類是引用類型,有可能有多個常量和變量在後臺同時引用某一個類實例。(對於結構體和枚舉來講,這並不成立。由於它們做爲值類型,在被賦予到常量、變量或者傳遞到函數時,其值老是會被拷貝。)

若是可以斷定兩個常量或者變量是否引用同一個類實例將會頗有幫助。爲了達到這個目的,Swift 內建了兩個恆等運算符:

  • 等價於 ( === )
  • 不等價於 ( !== )

如下是運用這兩個運算符檢測兩個常量或者變量是否引用同一個實例:

if tenEighty === alsoTenTighty {
    print("tenTighty and alsoTenEighty refer to the same Resolution instance.")
}
//輸出 "tenEighty and alsoTenEighty refer to the same Resolution instance."

6. 集合(Collection)類型的賦值和拷貝行爲

Swift 中字符串(String),數組(Array)字典(Dictionary)類型均以結構體的形式實現。這意味着String,Array,Dictionary類型數據被賦值給新的常量(或變量),或者被傳入函數(或方法)中時,它們的值會發生拷貝行爲(值傳遞方式)。

相關文章
相關標籤/搜索