Swift中Struct与Class的区别?

主要区别
1.struct是值类型,class是引用类型。

2.二者的本质区别:

struct是深拷贝,拷贝的是内容;class是浅拷贝,拷贝的是指针。

3.property的初始化不同:

class 在初始化时不能直接把 property 放在 默认的constructor 的参数里,而是需要自己创建一个带参数的constructor;而struct可以,把属性放在默认的constructor 的参数里。

4.变量赋值方式不同:

struct是值拷贝;class是引用拷贝

5.immutable变量:

swift的可变内容和不可变内容用var和let来甄别,如果初始为let的变量再去修改会发生编译错误。struct遵循这一特性;class不存在这样的问题

6.mutating function:

struct 和 class 的差別是 struct 的 function 要去改变 property 的值的时候要加上 mutating,而 class 不用。

7.继承:

struct不可以继承,class可以继承

8.struct比class更轻量:

struct分配在栈中,class分配在堆中

9.总结:
static 可以在类、结构体、或者枚举中使用。而 class 只能在类中使用。

static 可以修饰存储属性,static 修饰的存储属性称为静态变量(常量)。而 class 不能修饰存储属性。

static 修饰的计算属性不能被重写。而 class 修饰的可以被重写。

static 修饰的静态方法不能被重写。而 class 修饰的类方法可以被重写。

class 修饰的计算属性被重写时,可以使用 static 让其变为静态属性。

class 修饰的类方法被重写时,可以使用 static 让方法变为静态方法

class关键字指定的类方法可以被子类重写,但是用static关键字指定的类方法是不能被子类重写的

使用场景
在Swift中,结构体(Struct)和类(Class)都可以用来定义属性和方法来创建复杂的数据类型。但是,根据特定的场景和需求,选择使用结构体还是类有以下几个考虑点:

1、 当你需要一个轻量级的数据载体,并且数据的拷贝或值传递是可预期的行为时,应该优先考虑使用结构体。结构体实例在代码中传递时总是被拷贝,这有利于保证数据的不可变性和安全性。

2、 如果你要表示的数据结构需要利用继承来避免代码重复,或者需要在运行时检查和解释类型的实例,那么应该使用类。类支持继承,多态和类型转换,而结构体不支持。

3、 对于小型的数据结构,结构体由于其值类型的特性,在性能上通常优于类。在数组和字典这样的集合类型中使用结构体可以获得更好的性能。

4、 当你的数据结构需要通过网络传输或者需要与外部系统进行交互时,使用遵循Codable协议的结构体可以简化序列化和反序列化的过程。

5、 使用结构体可以避免内存泄漏和循环引用问题,这是因为结构体作为值类型,不会形成引用计数。

总的来说,如果数据结构比较简单,不需要用到继承,且期望通过值传递来确保数据安全,那么结构体是更好的选择。而对于需要利用面向对象特性的复杂数据模型,类则是更合适的选择。

 


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/eastWind1101/article/details/149045343

posted @ 2025-10-23 10:28  黄增松  阅读(4)  评论(0)    收藏  举报