Swift基本語法之類與結(jié)構(gòu)體

類和結(jié)構(gòu)體對比

Swift 中類和結(jié)構(gòu)體有很多共同點。共同處在于:

定義屬性用于存儲值

定義方法用于提供功能

定義下標(biāo)操作使得可以通過下標(biāo)語法來訪問實例所包含的值

定義構(gòu)造器用于生成初始化值

通過擴展以增加默認(rèn)實現(xiàn)的功能

實現(xiàn)協(xié)議以提供某種標(biāo)準(zhǔn)功能

與結(jié)構(gòu)體相比,類還有如下的附加功能:

繼承允許一個類繼承另一個類的特征

類型轉(zhuǎn)換允許在運行時檢查和解釋一個類實例的類型

析構(gòu)器允許一個類實例釋放任何其所被分配的資源

引用計數(shù)允許對一個類的多次引用

定義語法

struct Resolution {

? ? ? ? var width = 0

? ? ? ? var height = 0

}

class VideoMode {

? ? ? ? var resolution = Resolution()

? ? ? ? var interlaced = false

? ? ? ? var frameRate = 0.0

? ? ? ? ?var name: String?

}

結(jié)構(gòu)體和枚舉是值類型

在 Swift 中,所有的結(jié)構(gòu)體和枚舉類型都是值類型。所有的基本類型:整數(shù)(Integer)、浮點數(shù)(floating-point)、布爾值(Boolean)、字符串(string)、數(shù)組(array)和字典(dictionary),都是值類型,并且在底層都是以結(jié)構(gòu)體的形式所實現(xiàn)。這意味著被賦值給新的常量或變量,或者被傳入函數(shù)或方法中時,它們的值會被拷貝。

Objective-C 中NSString,NSArray和NSDictionary類型均以類的形式實現(xiàn),而并非結(jié)構(gòu)體。它們在被賦值或者被傳入函數(shù)或方法時,不會發(fā)生值拷貝,而是傳遞現(xiàn)有實例的引用。

類是引用類型

與值類型不同,引用類型在被賦予到一個變量、常量或者被傳遞到一個函數(shù)時,其值不會被拷貝。因此,引用的是已存在的實例本身而不是其拷貝。

類和結(jié)構(gòu)體的選擇

按照通用的準(zhǔn)則,當(dāng)符合一條或多條以下條件時,請考慮構(gòu)建結(jié)構(gòu)體:

該數(shù)據(jù)結(jié)構(gòu)的主要目的是用來封裝少量相關(guān)簡單數(shù)據(jù)值。

有理由預(yù)計該數(shù)據(jù)結(jié)構(gòu)的實例在被賦值或傳遞時,封裝的數(shù)據(jù)將會被拷貝而不是被引用。

該數(shù)據(jù)結(jié)構(gòu)中儲存的值類型屬性,也應(yīng)該被拷貝,而不是被引用。

該數(shù)據(jù)結(jié)構(gòu)不需要去繼承另一個既有類型的屬性或者行為。

以下情境中適合使用結(jié)構(gòu)體:

幾何形狀的大小,封裝一個width屬性和height屬性,兩者均為Double類型。

一定范圍內(nèi)的路徑,封裝一個start屬性和length屬性,兩者均為Int類型。

三維坐標(biāo)系內(nèi)一點,封裝x,y和z屬性,三者均為Double類型。


恒等運算符

等價于(===)表示兩個類類型(class type)的常量或者變量引用同一個類實例。

等于(==)“等于”表示兩個實例的值“相等”或“相同”,判定時要遵照設(shè)計者定義的評判標(biāo)準(zhǔn),因此相對于“相等”來說,這是一種更加合適的叫法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容