struct和class区别

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

构造方法

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

  • 注1:自动生成的带参构造器会将全部参数加入。
  • 注2:如果当中有一个私有属性,那么就不会自动生成带参构造器。

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


等号赋值

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

  • 这就会导致class中,新赋值的class对象中成员变量值修改了,旧的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 则不需要

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 类和结构体区别 1,内存管理方式不一样, 类引用类型, 分配在堆上。 结构体值类型,分配在栈上。 类 ,有析构。...
    我是小胡胡123阅读 1,696评论 0 1
  • 307、setValue:forKey和setObject:forKey的区别是什么? 答:1, setObjec...
    AlanGe阅读 5,486评论 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,145评论 1 51
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,431评论 1 10
  • 记第一次吃台湾菜 昨晚为了提前给一个大学舍友庆祝生日 去万达吃了台湾料理 第一次吃这么家常的台湾料理 点了四个菜加...
    烁火火阅读 1,625评论 0 0