class 與 struct 的主要區別:類是引用類型,而結構體是值類型。
沒圖說個J8,好,看圖說話。
class 引用類型
//類 - 引用類型
class 未成型人類 {
var 身高 = 168
init() { }
init(身高: Int) {
self.身高 = 身高
}
}
let 小華 = 未成型人類()
let 大明 = 未成型人類(身高: 200)
let 黑仔 = 大明
let 高佬 = 大明
高佬.身高 += 10
print(大明.身高) // = 210
let 小高 = 高佬
小高.身高 += 10
print(大明.身高) // = 220
struct 值類型
//結構體 - 值類型
struct 克隆人 {
var 身高 = 180
init() { }
init(身高: Int) {
self.身高 = 身高
}
}
var 小A = 克隆人()
小A.身高 = 122
let cokeA = 小A
print(cokeA.身高) // = 122
print(小A.身高) // = 122
let 小B = 克隆人()
print(小A.身高) // = 180
什么時候使用類? 什么時候使用結構體?
注意:雖說賦值時候值類型表面上經常要執行拷貝現象,但 Swift 在管理所有的值拷貝會確保性能最優化,所以我們沒有必要去回避賦值來確保性能最優化。
/* 什么時候使用類? 什么時候使用結構體?
一般情況下,可以:
1? 把類看成是物體
如: 人、車、動物、商店等..一般跟生物沾邊多
比如一個人有少屬性,雖有不同人種,但是他們很多屬性都是一樣的,使用類的繼承關系,很好描述人這一類東東...
2? 把結構體看作值
如:位置(經緯度)、坐標、溫度等..一般跟物理沾邊多
結構體比類更加 “輕量級”,因為結構體的內存空間是開在系統的棧中,而類則開在系統的堆中。當然對于小程序來說,可以忽略不計。
還有什么時候使用也不是絕對的,因為他們都有很多類似的地方,也看個人習慣思維愛好之類。何況現在 Swift 還有給力協議這東西,所以原來只能通過類來實現的,也可以通過協議+來實現。