Swift中的Struct vs Class
在处理数据或自定义数据类型时,每个人有时都会遇到这个问题。 因此,我深入研究了Google和许多网站,并指出了一些我想分享给大家参考的差异。
在此之前,我先说一下两者的相似之处:
结构和类都可以:
- 扩展
- 实施协议
- 定义初始化
- 具有属性和功能
您可以在这里简要阅读所有这些内容
区别
- 继承 :
类可以相互继承,但结构不能
2. 通过 :
类通过Reference传递,但结构通过Value传递。 因此,我们将类称为“引用类型”,将结构称为“值类型”
3. 可变性 :
如果结构是不可变的,则这些类是Mutable的。 例如,如果我们有用let属性声明的class实例,如let a:A()。 作为类内部变量的属性可以更改这些变量的值。
4. 参考计数 :
由于是引用类型,所以Class的单个实例可以一次具有多个引用,从而使其具有引用计数。 但是结构不是这种情况。 结构实例一次仅具有一个引用。
5. 初始化器
结构不需要声明任何初始化程序,因为默认情况下它们是可用的,尽管可以根据需要编写该初始化程序。 这些类需要声明init以将值初始化为属性。
6. 反初始化器
类确实具有deinit,而在结构中不存在。
7. 线程安全:
默认情况下,结构是线程安全的,因为它们是值类型,所以不会有覆盖相同实例的机会,因此不会有任何竞争条件。 这些类不是唯一的线程安全类,因为它们是引用类型。
何时使用结构和类:
我在这里找到Irina Ernst的最佳答案
“结构最适合保存数据,而不是逻辑。”