Swift 中類和結(jié)構(gòu)體有很多共同點(diǎn)。共同處在于:
更多信息請(qǐng)參見(jiàn) 屬性,方法,下標(biāo)腳本,初始過(guò)程,擴(kuò)展,和協(xié)議。
與結(jié)構(gòu)體相比,類還有如下的附加功能:
更多信息請(qǐng)參見(jiàn)繼承,類型轉(zhuǎn)換,初始化,和自動(dòng)引用計(jì)數(shù)。
注意:
結(jié)構(gòu)體總是通過(guò)被復(fù)制的方式在代碼中傳遞,因此請(qǐng)不要使用引用計(jì)數(shù)。
類和結(jié)構(gòu)體有著類似的定義方式。我們通過(guò)關(guān)鍵字class和struct來(lái)分別表示類和結(jié)構(gòu)體,并在一對(duì)大括號(hào)中定義它們的具體內(nèi)容:
class SomeClass {
// class definition goes here
}
struct SomeStructure {
// structure definition goes here
}
注意:
在你每次定義一個(gè)新類或者結(jié)構(gòu)體的時(shí)候,實(shí)際上你是有效地定義了一個(gè)新的 Swift 類型。因此請(qǐng)使用UpperCamelCase這種方式來(lái)命名(如SomeClass和SomeStructure等),以便符合標(biāo)準(zhǔn)Swift 類型的大寫(xiě)命名風(fēng)格(如String,Int和Bool)。相反的,請(qǐng)使用lowerCamelCase這種方式為屬性和方法命名(如framerate和incrementCount),以便和類區(qū)分。
以下是定義結(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?
}
在上面的示例中我們定義了一個(gè)名為Resolution的結(jié)構(gòu)體,用來(lái)描述一個(gè)顯示器的像素分辨率。這個(gè)結(jié)構(gòu)體包含了兩個(gè)名為width和height的儲(chǔ)存屬性。儲(chǔ)存屬性是捆綁和儲(chǔ)存在類或結(jié)構(gòu)體中的常量或變量。當(dāng)這兩個(gè)屬性被初始化為整數(shù)0的時(shí)候,它們會(huì)被推斷為Int類型。
在上面的示例中我們還定義了一個(gè)名為VideoMode的類,用來(lái)描述一個(gè)視頻顯示器的特定模式。這個(gè)類包含了四個(gè)儲(chǔ)存屬性變量。第一個(gè)是分辨率,它被初始化為一個(gè)新的Resolution結(jié)構(gòu)體的實(shí)例,具有Resolution的屬性類型。新VideoMode實(shí)例同時(shí)還會(huì)初始化其它三個(gè)屬性,它們分別是,初始值為false(意為“non-interlaced video”)的interlaced,回放幀率初始值為0.0的frameRate和值為可選String的name。name屬性會(huì)被自動(dòng)賦予一個(gè)默認(rèn)值nil,意為“沒(méi)有name值”,因它是一個(gè)可選類型。
Resolution結(jié)構(gòu)體和VideoMode類的定義僅描述了什么是Resolution和VideoMode。它們并沒(méi)有描述一個(gè)特定的分辨率(resolution)或者視頻模式(video mode)。為了描述一個(gè)特定的分辨率或者視頻模式,我們需要生成一個(gè)它們的實(shí)例。
生成結(jié)構(gòu)體和類實(shí)例的語(yǔ)法非常相似:
let someResolution = Resolution()
let someVideoMode = VideoMode()
結(jié)構(gòu)體和類都使用構(gòu)造器語(yǔ)法來(lái)生成新的實(shí)例。構(gòu)造器語(yǔ)法的最簡(jiǎn)單形式是在結(jié)構(gòu)體或者類的類型名稱后跟隨一個(gè)空括弧,如上一篇:Swift析構(gòu)過(guò)程原理下一篇:Swift枚舉聲明