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