Swift中類和結構體

2022-03-26 01:47:24 字數 1544 閱讀 2140

1. 類和結構體對比

swift 中類和結構體有很多共同點:

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

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

類和結構體有著類似的定義方式。我們通過關鍵字classstruct來分別表示類和結構體,並在一對大括號中定義它們的具體內容,**如下:

class

videomode

struct

resolution

類和結構體例項,**如下:

let someresolution =resolution()

let somevideomode = videomode()

3. 結構體型別的成員逐一構造器

結構體型別的成員逐一構造器(memberwise initializers for structure types):所有結構體都有乙個自動生成的成員逐一構造器,用於初始化新結構體例項中成員的屬性。新例項中各個屬性的初始值可以通過屬性的名稱傳遞到成員逐一構造器之中,與結構體不同,類例項沒有預設的成員逐一構造器。

結構體型別的成員逐一構造器**如下:

let someresolution = resolution(width:640, height:220)

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

實際上,在 swift 中,所有的基本型別:整數(integer)、浮點數(floating-point)、布林值(booleans)、字串(string)、陣列(array)和字典(dictionaries),都是值型別,並且都是以結構體的形式在後台所實現。

4.1 類是引用型別

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

5. 恒等運算子

因為類是引用型別,有可能有多個常量和變數在後台同時引用某乙個類例項。(對於結構體和列舉來說,這並不成立。因為它們作為值型別,在被賦予到常量、變數或者傳遞到函式時,其值總是會被拷貝。)

如果能夠判定兩個常量或者變數是否引用同乙個類例項將會很有幫助。為了達到這個目的,swift 內建了兩個恒等運算子:

以下是運用這兩個運算子檢測兩個常量或者變數是否引用同乙個例項:

if teneighty ===alsotentighty 

//輸出 "teneighty and alsoteneighty refer to the same resolution instance."

6. 集合(collection)型別的賦值和拷貝行為

swift 中字串(string),陣列(array)字典(dictionary)型別均以結構體的形式實現。這意味著string,array,dictionary型別資料被賦值給新的常量(或變數),或者被傳入函式(或方法)中時,它們的值會發生拷貝行為(值傳遞方式)。

Swift 類和結構體

swift 中類和結構體的共同點 1.定義屬性用於儲存值 2.定義方法用於提供功能 3.定義下標用於訪問值 4.定義構造器用於生成初始化值 5.通過擴充套件以增加預設實現的功能 6.符合協議以對某類提供標準功能 class 不同於 struct 的特點 1.允許乙個類繼承另乙個類的特徵 2.型別轉換...

Swift 結構體和類

結構體 swift結構體也具有封裝的概念 swift結構體比oc c語言裡面的結構體更加進了一步,裡面可以有方法,更接近我們的類 結構體的定義格式 struct結構體名 struct rect var width double 按構造方法賦初值 var height double 方法 func g...

swift中類和結構體的區別

所有的結構體都有乙個自動生成的初始化器,你可以使用它來初始化結構體例項的成員屬性。新例項屬性的初始化值可以通過屬性名稱傳遞到成員初始化器中 let vga resolution width 640,height 480 與結構體不同,類例項不會接收預設的成員初始化器,初始化器的更多細節在初始化章節。...