結構體: Bool、Int读处、Double糊治、String、Array罚舱、Dictionary等常見的類型都是結構體
- 結構體都有一個編譯器自動生成的的初始化器(initializer,初始化方法,構造器,構造方法)
- 編譯器根據情況可能會為結構體生成g多個初始化器井辜,保證所有成員都有初始值
- 定義結構體時在結構體內自定義了初始化器,編譯器j就不會生成t其他的初始化器
- 內部內存結構是連續(xù)的,實際占用是成員的內存大小,分配的要看內存對齊
struct Point {
var x: Int
var y: Int = 1
var z: Int?
}
struct Point1 {
var x: Int
var y: Int
init() {
x = 0
y = 0
}
}
struct Point2 {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
類
- 類的定義與結構體類似,但編譯器沒有生成可以傳入成員值得初始化器
- 類的所有成員在定義時指定了初始值,編譯器會生成無參的初始化器,成員的初始化在這個初始化器中完成
結構體與類的區(qū)別
- 結構體是值類型(枚舉也是),類是引用類型(指針類型)
-
值類型
- 值類型給 let管闷、var 賦值或者給函數傳參時抑胎,是直接將所有內容拷貝一份,屬于深拷貝
- Swift 標準庫中為了提升性能渐北,String阿逃、Array、Dictionary赃蛛、Set 采取 Copy On Write 的技術(僅當有"寫"的操作時才會真的進行拷貝操作)
引用類型
- 引用類型給 let恃锉、var 賦值或者傳參,是將儲存的內存地址拷貝一份