美文网首页
struct和class区别

struct和class区别

作者: 小_黑_屋 | 来源:发表于2018-01-10 18:05 被阅读0次

本质区别: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 则不需要

相关文章

  • Lesson2

    Class 和Struct区别 Class的对象是引用类型,Struct的对象是值类型 Struct没有继承

  • Swift1-1类与结构体区别

    区别: class是引用类型,struct是值类型;(本质区别) class可以继承类、接口和被继承,struct...

  • 答《 卓同学的 Swift 面试题 》

    原文链接 卓同学的 Swift 面试题 class 和 struct 的区别 class 为类, struct 为...

  • C++: 类(上)

    简介1、C++中可以使用struct、class来定义一个类2、 struct和class的区别: struct修...

  • struct和class区别

    本质区别:struct 是值引用(value reference),而 class 是地址引用(class ref...

  • class和struct区别

    讨论Struct与Class之前,我们先来看一个概念:Value Type(值类型),Reference Type...

  • struct 和 class区别

    struct 是值类型, class 是引用类型 如果你持有一个实例, 想在多个地方对这个实例的属性的修改生效, ...

  • 😄 -- Class和Struct 区别

    1.在C++中引入Struct 是为了和C 进行兼容; 2.两者的区别(权限) (1)struct默认 属性是pu...

  • C++面向对象-类

    类 C++中可以使用struct和class来定义一个类,在C++中,struct和class的区别是struct...

  • iOS面试题

    1. struct和class的区别 swift中,class是引用类型,struct是值类型。值类型在传递和赋值...

网友评论

      本文标题:struct和class区别

      本文链接:https://www.haomeiwen.com/subject/yjnonxtx.html