Swift中的Struct vs Class

在处理数据或自定义数据类型时,每个人有时都会遇到这个问题。 因此,我深入研究了Google和许多网站,并指出了一些我想分享给大家参考的差异。

在此之前,我先说一下两者的相似之处:

结构和类都可以:

  • 扩展
  • 实施协议
  • 定义初始化
  • 具有属性和功能

您可以在这里简要阅读所有这些内容

区别

  1. 继承

类可以相互继承,但结构不能

2. 通过

类通过Reference传递,但结构通过Value传递。 因此,我们将类称为“引用类型”,将结构称为“值类型”

3. 可变性

如果结构是不可变的,则这些类是Mutable的。 例如,如果我们有用let属性声明的class实例,如let a:A()。 作为类内部变量的属性可以更改这些变量的值。

4. 参考计数

由于是引用类型,所以Class的单​​个实例可以一次具有多个引用,从而使其具有引用计数。 但是结构不是这种情况。 结构实例一次仅具有一个引用。

5. 初始化器

结构不需要声明任何初始化程序,因为默认情况下它们是可用的,尽管可以根据需要编写该初始化程序。 这些类需要声明init以将值初始化为属性。

6. 反初始化器

类确实具有deinit,而在结构中不存在。

7. 线程安全:

默认情况下,结构是线程安全的,因为它们是值类型,所以不会有覆盖相同实例的机会,因此不会有任何竞争条件。 这些类不是唯一的线程安全类,因为它们是引用类型。

何时使用结构和类:

我在这里找到Irina Ernst的最佳答案

“结构最适合保存数据,而不是逻辑。”