1、類和結構體的定義
<pre name="code" class="html">struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String? //值為可選String類型的name
}
類:關鍵字class, struct:結構體
2、建立類和結構體的執行個體(其他語言中稱執行個體為對象。)
let someResolution = Resolution()
let someVideoMode = VideoMode()
咦,很簡單啊,怎麼沒有關鍵字new呢。。。。 和将函數指派給變量是一樣的啊。是的。就這麼簡單。無需關鍵字。
3、結構體有一個逐屬性構造器,類木有。
let vga = Resolution(width:640, height: 480)
4、使用. 點 來通路屬性,包括通路和指派。
someVideoMode.resolution.width = 1280
5、結構體是值類型,類是引用類型。
6、類的恒等運算符 等價于(===),不等價于(!==)判斷兩個變量或常量是否引用了同一個執行個體
7、指針無需特定的(*)來表示是一個記憶體位址引用,也不需要特定的符号(->)來通路,它和通路屬性是一樣的 用 (.)點。
8、類和結構體的差別
Swift 中類和結構體有很多共同點。共同處在于:
- 定義屬性用于存儲值
- 定義方法用于提供功能
- 定義附屬腳本用于通路值
- 定義構造器用于生成初始化值
- 通過擴充以增加預設實作的功能
- 符合協定以對某類提供标準功能
與結構體相比,類還有如下的附加功能:
- 繼承允許一個類繼承另一個類的特征
- 類型轉換允許在運作時檢查和解釋一個類執行個體的類型
- 解構器允許一個類執行個體釋放任何其所被配置設定的資源
- 引用計數允許對一個類的多次引用
9、類和結構體的選擇
按照通用的準則,當符合一條或多條以下條件時,請考慮建構結構體:
- 結構體的主要目的是用來封裝少量相關簡單資料值。
- 有理由預計一個結構體執行個體在指派或傳遞時,封裝的資料将會被拷貝而不是被引用。
- 任何在結構體中儲存的值類型屬性,也将會被拷貝,而不是被引用。
- 結構體不需要去繼承另一個已存在類型的屬性或者行為。
合适的結構體候選者包括:
- 幾何形狀的大小,封裝一個
屬性和width
屬性,兩者均為height
類型。Double
- 一定範圍内的路徑,封裝一個
屬性和start
屬性,兩者均為length
類型。Int
- 三維坐标系内一點,封裝
,x
和y
屬性,三者均為z
類型。Double
在所有其它案例中,定義一個類,生成一個它的執行個體,并通過引用來管理和傳遞。實際中,這意味着絕大部分的自定義資料構造都應該是類,而非結構體。