Swift 類與結構體(1)

2022-09-12 14:51:20 字數 1581 閱讀 6866

一、類與結構體

在這裡,我們主要**在swift中類與結構體之間的相同與不同,以及在我們平時使用的過程中應該如何選擇使用。

(1)結構體的特性:

(2) 類特性

類是一種引用型別,他分配在堆區(不連續,第乙個成員的位址和類的首位址不一致)中,也就是說乙個類型別的變數不是直接儲存具體的例項物件,而是儲存當前具體例項的記憶體位址的引用,複製後的例項和成員屬性的值都是指向原有的位址空間。

class

student1

//class 'student1' has no initializers

(類不會預設生成成員初始化器)我們需要知道在宣告類的屬性時 ,我們如果既沒有初始化方法又沒有給類的屬性定義初始值時,編譯器會報錯。我們需要在定義類時給定init方法或者為類的儲存屬性定義初始值。初始化器在初始化前不可以呼叫任何例項方法、不能讀取任何屬性的值、不能引用self作為值

class

student1

//便捷初始化器

convenience init()

//可失敗的初始化器

init?(age:int,name:string)

self.age =age

self.name =name

}//必要初始化器

required init(age:int,name:string)

}

那麼在繼承時,初始化器又是如何的呢?

class

student:person

}

(3)類和結構體的不同

從最直觀的角度來講,類和結構體最顯著的區別在於類是引用型別,而結構體是值類。

相同點不同點

二、類的生命週期

三、補充知識

四、sil檔案

這部分內容我也是第一次了解,下面以swift的物件記憶體分配為例:

我們在專案的targtets-xxscript-build phases的shell指令碼中輸出 swiftc -emit-sil $/llswifttest/main.swift > ./main.sil & open main.sil 即可生成並開啟sil檔案

五、lldb除錯檢視swift物件記憶體分配過程

在專案的debug-debug workflow-always show中會看到我們在生成乙個類例項時呼叫的函式

通過對這行打斷點按住control可繼續向下進入這個函式呼叫內部

由此我們推斷出:__allocating_init -----> swift_allocobject -----> swift_allocobject -----> swift_slowalloc -----> malloc(swfit物件記憶體分配過程)

Swift教程 類與結構體

swift 中類於結構體 swift中結構體與類既相似,又有不同。相似點 可以儲存變數 儲存函式 不同點 結構體不支援繼承,類支援 結構體是引用型別,類引用型別 定義 結構體定義 struct somestructure 類定義 class someclass2.例項化變數 let somereso...

Swift 類與結構體(2)

swift 類與結構體 2 在這裡,我們從函式的角度來出發看類與結構體 一 函式相關的修飾符 1.mutating修飾符 前提 在swift中class 和struct中都可以定義方法,但是在預設情況下值型別的屬性是無法被自身的例項方法修改的 struct student mutating func...

swift與結構體

struct resolution 所有結構體都有乙個自動生成的成員逐一構造器,用於初始化新結構體例項中成員的屬性 let vga resolution width 640,height 480 let someresolution resolution println vga.width prin...