struct和class区别

2018-01-10  本文已影响0人  小_黑_屋

本质区别:struct 是值引用(value reference),而 class 是地址引用(class reference)。后面很多差异都是因此导致的。

构造方法

struct 会自动将成员变量自动添加到构造方法中,自动生成带参构造器。

class 不会自动生成带参构造器


等号赋值

struct是值引用类型,那么在使用等号赋值的时候,会将值复制一份出来。class 是地址引用类型,那么在赋值的时候,就会复制地址,也就是一个新的指向原来地址的指针

struct SRectangle {
    var width = 50
    var height = 50
}

class CRectangle {
    var width = 50
    var height = 50
}

var sOld = SRectangle()
var sNew = sOld
sOld.width = 100
//这里 sNew.width 值是 50 不受影响

var cOld = CRectangle()
var cNew = cOld
cOld.width = 100
//这里 cNew.width 值也变成了 100 

成员变量

struct 是值引用类型,所以整个对象是一个整体,他实例对象如果是用 let 修饰的,那么无论里面成员变量是用 var 还是 let 修饰 ,其成员变量的值都是不可改变的。

struct Rectangle {
    var width = 50
    var height = 50
}

//调用
let myRectangle = Rectangle()
//myRectangle.width = 100
//这里如果调用就会报错,说他是不能改变的

class 是地址引用类型的,即使对象是 let 修饰也是可以修改里面的成员变量

class Rectangle {
    var width = 50
    var height = 50
}

//调用
let myRectangle = Rectangle()
myRectangle.width = 100
//这里调用就是没有问题的

继承

struct无法继承,class可以继承


extension 使用

struct 在 extension 中添加方法来修改成员变量的值的时候,需要在方法前加 mutating ,class 则不需要

上一篇 下一篇

猜你喜欢

热点阅读