swift 學習記錄(類和結構體)

2021-07-09 02:32:46 字數 2525 閱讀 4019

類和結構體是人們構建**所用的一種通用且靈活的構造體。我們可以使用完全相同的語法規則來為類和結構體

定義屬性(常量、變數)和新增方法,從而擴充套件類和結構體的功能。

類和結構體對比

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

1、定義屬性用於儲存值

2、定義方法用於提供功能

3、 定義附屬指令碼用於訪問值

4、定義構造器用於生成初始化值

5、 通過擴充套件以增加預設實現的功能

6、 實現協議以提供某種標準功能

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

1、繼承允許乙個類繼承另乙個類的特徵

2、 型別轉換允許在執行時檢查和解釋乙個類例項的型別

3、解構器允許乙個類例項釋放任何其所被分配的資源

4、引用計數允許對乙個類的多次引用

注意: 結構體總是通過被複製的方式在**中傳遞,因此請不要使用引用計數。 定義

使用 class 關鍵字 定義類,struct關鍵字定義 結構體

基本語法

class 類名

struct 結構體名

例如:

struct resolution 

class videomode

類和結構體的例項

let someresolution = resolution()

let somevideomode = videomode()

結構體和類都使用構造器語法來生成新的例項。構造器語法的最簡單形式是在結構體或者類的型別名稱後跟隨一對空括號,

如resolution() 或videomode()。通過這種方式所建立的類或者結構體例項,其屬性均會被初始化為預設值。

屬性的訪問

通過點語法,來訪問例項的屬性。

let someresolution = resolution()

print(someresolution.width)

//0

通過點語法為屬性賦值

let somevideomode = videomode()

somevideomode.framerate = 10.5

print(somevideomode.framerate)

結構體成員逐一構造器

所有結構體都有乙個自動生成的成員逐一構造器,用於初始化新結構體例項中成員的屬性。新例項中各個屬性的

初始值可以通過屬性的名稱傳遞到成員逐一構造器之中:

let someresolution = resolution(width:1000,height:200)
類例項沒有預設的成員逐一構造器

值型別和引用型別

列舉和結構體是值型別被賦予給乙個變數、常量或者本身被傳遞給乙個函式的時候,實際上操作的是其的拷貝副本

類是應用型別,與值型別不同,引用型別在被賦予到乙個變數、常量或者被傳遞到乙個函式時,操作的是引用,其並不是拷

貝副本。因此,引用的是已存在的例項本身而不是其拷貝副本。

恒等運算子

因為類是引用型別,有可能有多個常量和變數在後台同時引用某乙個類例項。為了判斷兩個常量或變數是否引用同乙個類例項,

swift 內建了兩個恒等運算子:

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

=== 表示 兩個類 型別的 常量 或變數引用同乙個 類例項。與 == 不同,== 表示兩個例項的值「相同」

let mode1 = videomode()

let mode2 = videomode()

let mode3 = mode1

if mode1 === mode2else if mode1 !== mode2

if mode1 === mode3else

類和結構體的選擇

結構體例項總是通過值傳遞,類例項總是通過引用傳遞。這意味兩者適用不同的任務。當你在考慮乙個工

程專案的資料構造和功能的時候,你需要決定每個資料構造是定義成類還是結構體。

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

1、結構體的主要目的是用來封裝少量相關簡單資料值。

2、 有理由預計乙個結構體例項在賦值或傳遞時,封裝的資料將會被拷貝而不是被引用。

3、 任何在結構體中儲存的值型別屬性,也將會被拷貝,而不是被引用。

?4、結構體不需要去繼承另乙個已存在型別的屬性或者行為。

舉例來說,以下情境中適合使用結構體:

1、 幾何形狀的大小,封裝乙個width 屬性和height 屬性,兩者均為double 型別。

2、一定範圍內的路徑,封裝乙個start 屬性和length 屬性,兩者均為int 型別。

3、 三維座標系內一點,封裝x , y 和z 屬性,三者均為double型別。

在所有其它案例中,定義乙個類,生成乙個它的例項,並通過引用來管理和傳遞。實際中,這意味著絕大部分的

自定義資料構造都應該是類,而非結構體。

Swift學習 類和結構體補充

類的構造器 class zs init name string 析構 與之前寫oc中的dealloc功能一樣 deinit 預設構造器 var zs zs 呼叫了重寫的構造方法 var zs1 zs name 帥不 zs1.name 定義結構體 struct length 呼叫了預設的構造器 ini...

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...