標籤:false star 而不是 dcl 應該 繼承 案例 frame 變數
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}
類:keywordclass, struct:結構體
2、建立類和結構體的執行個體(其它語言中稱執行個體為對象。)
let someResolution = Resolution()let someVideoMode = VideoMode()
咦,非常easy啊,怎麼沒有keywordnew呢。。
。
。
和將函數賦值給變數是一樣的啊。是的。
就這麼簡單。無需keyword。
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
類型。
在全部其他案例中,定義一個類。產生一個它的執行個體,並通過引用來管理和傳遞。實際中,這意味著絕大部分的自己定義資料構造都應該是類,而非結構體。
【Swift】學習筆記(八)——類和結構體