iOS DeveloperiOS 开发 swift 文章收集

Swfit - 类 class 与结构体 struct 的区别

2016-06-19  本文已影响209人  小黑Swift

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 还有给力协议这东西,所以原来只能通过类来实现的,也可以通过协议+来实现。
上一篇下一篇

猜你喜欢

热点阅读