class 与 struct 的主要区别:类是引用类型,而结构体是值类型。
没图说个J8,好,看图说话。
//类 - 引用类型
class 未成型人类 {
var 身高 = 168
init() { }
init(身高: Int) {
self.身高 = 身高
}
}
let 小华 = 未成型人类()
let 大明 = 未成型人类(身高: 200)
let 黑仔 = 大明
let 高佬 = 大明
高佬.身高 += 10
print(大明.身高) // = 210
let 小高 = 高佬
小高.身高 += 10
print(大明.身高) // = 220
//结构体 - 值类型
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 还有给力协议这东西,所以原来只能通过类来实现的,也可以通过协议+来实现。