在 Swift 中,struct 和 class 是两种不同的数据类型,它们都可以用来封装数据和功能,但在具体的使用场景和特性方面有一些区别。
- struct 是值类型,class 是引用类型
struct 是值类型,也就是说当把一个 struct 实例赋值给一个新的变量、常量或传递给一个函数时,会创建这个实例的一个副本,而不是原来实例的一个引用。而 class 是引用类型,赋值、传递或赋给函数参数时都是传递引用。这意味着修改一个 class 实例的一个属性会对所有引用它的对象产生影响,而修改一个 struct 实例的属性只会影响自身。
- struct 没有继承,class 支持继承
struct 没有继承,所以不能从另一个 struct 或 class 继承属性和方法。但 class 支持继承,可以从父类继承属性和方法,并添加新的属性和方法。
- struct 默认成员变量是 let 类型,class 默认成员变量是 var 类型
struct 默认情况下把成员变量设置成 let 类型,也就是说 struct 实例的属性是不可变的。如果想在 struct 内部修改属性的值,需要在方法前加 mutating 关键字。而 class 中成员变量的默认类型是 var,可以直接在 class 实例里修改成员变量的值。
- struct 值类型比 class 的引用类型更适合处理简单的数据类型
在处理简单的数据类型时(如数字、字符、布尔值),使用 struct 更加适合,因为 struct 是值类型,它不需要堆分配、引用计数等额外开销,而且复制时耗时更少,原因是复制值类型是直接复制其值,而不是复制一个指向对象的指针。
- class 可以实现 deinit 方法,用于释放资源
在 class 中可以实现 deinit 方法,用于在对象被释放时释放一些资源。而 struct 并没有这个特性。
综上所述,struct 和 class 在使用场景和特性方面各有不同,需要根据具体情况选择合适的类型。