比較 | 類別 (class) | 結構 (struct) |
---|---|---|
屬性 | O | O |
方法 | O | O |
屬性 | O | O |
建構器 | O | O |
成員逐一建構器 | X | O |
繼承 | O | X |
解構器 | O | X |
型別轉換 | O | X |
class 類別名 {
//類別裡的屬性、方法
}
struct 結構名 {
//結構裡的屬性、方法
}
裡面的常數或是變數為屬性; 而裡面的函式則為方法。
在類別或結構中宣告屬性可以視為給它一個預設的規格,接下來要用就需要先生成實體,接著就能取到預設的屬性。
struct royalStatus {
var level = 0
}
class princess {
var age = 17
var name = "Arya Stark"
}
var newPrincess = princess() //生成實體
print("Her name is \(newPrincess.name) and she's \(newPrincess.age)-year-old") //取得屬性
或是將新的值派給實體中的屬性
newPrincess.name = "Sansa Stark"
//印出新值 Her name is Sansa Stark
print("Her name is \(newPrincess.name)")
利用前面定義的結構生成新的實體
類別實體沒有這個功能
let newStatus = royalStatus(level: 1)
print(newStatus.level) //印出 1
比較 | 結構 | 列舉 | 類別 |
---|---|---|---|
值型別 | V | V | |
參考型別 | V |
值型別在被指派或傳遞後,實際上是做一個 copy 的動作,若做了更改的動作,則新舊兩個值不互相影響; 反之,參考型別因為是存記憶體空間中配置的位置,因此它動到的是實體本身。