1.結(jié)構(gòu)體和類的對(duì)比
1.1 相同點(diǎn):
- 定義屬性用于儲(chǔ)存值
- 定義方法用于提供功能
- 定義下標(biāo)用于通過(guò)下標(biāo)語(yǔ)法訪問(wèn)值
- 定義初始化器用于生成初始化值
- 通過(guò)擴(kuò)展以增加默認(rèn)實(shí)現(xiàn)的功能
- 符合協(xié)議以對(duì)某類提供標(biāo)準(zhǔn)功能
1.2 不同點(diǎn): - 繼承允許一個(gè)類繼承另一個(gè)類的特征
- 類型轉(zhuǎn)換允許在運(yùn)行時(shí)檢查和解釋一個(gè)類實(shí)例的類型
- 取消初始化器允許一個(gè)類實(shí)例釋放任何其所被分配的資源
- 引用計(jì)數(shù)允許對(duì)一個(gè)類的多次引用
2.定義
//結(jié)構(gòu)體的定義
struct Resolution {
var width = 0
var heigth = 0
}
//類的定義
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
3.實(shí)例的生成
let someResolution = Resolution()
let someVideoMode = VideoMode()
4.結(jié)構(gòu)體類型的成員逐一初始化器
所有結(jié)構(gòu)體都有一個(gè)自動(dòng)生成的成員逐一初始化器碍舍,用于初始化新結(jié)構(gòu)體實(shí)例中成員的屬性后添。新實(shí)例中各個(gè)屬性的初始值可以通過(guò)屬性的名稱傳遞到成員逐一初始化器之中:
let vga = resolution(width:640, heigth: 480)
與結(jié)構(gòu)體不同羔杨,類實(shí)例沒(méi)有默認(rèn)的成員逐一初始化器铐望。
5.屬性訪問(wèn):點(diǎn)語(yǔ)法
6.類和結(jié)構(gòu)體的選擇
符合一條或多條以下條件時(shí)脖母,請(qǐng)考慮構(gòu)建結(jié)構(gòu)體:
結(jié)構(gòu)體的主要目的是用來(lái)封裝少量相關(guān)簡(jiǎn)單數(shù)據(jù)值。
有理由預(yù)計(jì)一個(gè)結(jié)構(gòu)體實(shí)例在賦值或傳遞時(shí)谜慌,封裝的數(shù)據(jù)將會(huì)被拷貝而不是被引用据沈。
任何在結(jié)構(gòu)體中儲(chǔ)存的值類型屬性,也將會(huì)被拷貝鸠珠,而不是被引用巍耗。
結(jié)構(gòu)體不需要去繼承另一個(gè)已存在類型的屬性或者行為。