Swift 中,struct 和 class 是两种不同的数据类型,各自的使用场景和区别

6 min read

在 Swift 中,struct 和 class 是两种不同的数据类型,它们都可以用来封装数据和功能,但在具体的使用场景和特性方面有一些区别。

  1. struct 是值类型,class 是引用类型

struct 是值类型,也就是说当把一个 struct 实例赋值给一个新的变量、常量或传递给一个函数时,会创建这个实例的一个副本,而不是原来实例的一个引用。而 class 是引用类型,赋值、传递或赋给函数参数时都是传递引用。这意味着修改一个 class 实例的一个属性会对所有引用它的对象产生影响,而修改一个 struct 实例的属性只会影响自身。

  1. struct 没有继承,class 支持继承

struct 没有继承,所以不能从另一个 struct 或 class 继承属性和方法。但 class 支持继承,可以从父类继承属性和方法,并添加新的属性和方法。

  1. struct 默认成员变量是 let 类型,class 默认成员变量是 var 类型

struct 默认情况下把成员变量设置成 let 类型,也就是说 struct 实例的属性是不可变的。如果想在 struct 内部修改属性的值,需要在方法前加 mutating 关键字。而 class 中成员变量的默认类型是 var,可以直接在 class 实例里修改成员变量的值。

  1. struct 值类型比 class 的引用类型更适合处理简单的数据类型

在处理简单的数据类型时(如数字、字符、布尔值),使用 struct 更加适合,因为 struct 是值类型,它不需要堆分配、引用计数等额外开销,而且复制时耗时更少,原因是复制值类型是直接复制其值,而不是复制一个指向对象的指针。

  1. class 可以实现 deinit 方法,用于释放资源

在 class 中可以实现 deinit 方法,用于在对象被释放时释放一些资源。而 struct 并没有这个特性。

综上所述,struct 和 class 在使用场景和特性方面各有不同,需要根据具体情况选择合适的类型。