何时在Swift中使用类或结构

在类和结构之间进行选择实际上可能会对您的代码产生巨大影响,或更具体地讲,从技术上来说是不正确的。 确保您可以做得更好!

先决条件:

  • 面向对象基础

基础

struct是值类型,而class是引用类型。 困难在于,对于许多用途而言,类和结构是可互换的。 我们将依次轮流使用它们的“预期用途”以及轮流使用的一些基本功能。

值和引用类型的定义如下:

简单的结构

结构可以封装数据值,因此可以合理地认为这些值将在项目周围复制而不是被引用(由struct,Int,Float,Array等存储的所有属性都是值类型)。 当您免费获得默认初始化程序时,它们特别易于使用。 由于结构是值类型,因此它们保留在堆栈中

复制值类型会创建两个名称不同的值类型实例(此处为struct)。

构造图是免费获取初始化器的,您可以在其中使用免费初始化器初始化所有属性(即使它们已预先初始化)。

简单的课

上面结构的等效类必须具有一个自定义初始化程序。

类获得免费的初始化器,但前提是属性具有预初始化的值。

要注意的一件事是,值类型存储在堆栈中,但是如果类具有结构的实例,则该结构将与类一起存储在堆中。

什么时候使用类或结构呢?

在身份重要的地方使用一个类,在平等重要的地方使用一个结构

和…

无法继承结构

好吧,这很有意义(线索就在名字中),因为结构是值类型。

但是您可以扩展一个结构和一个类

实际上,您也可以扩展枚举!

值类型是线程安全的

您可以信任跨线程使用值类型,因为它们正在使用原始类型的副本。 这样可以避免对引用类型使用锁定。

值类型表现出色

值类型比引用类型快。 这是因为引用类型是在堆上分配的,而不是在栈上分配的。

可以比较引用类型以查看实例是否完全相同

===可以确保两个对象相等,这意味着它们存在于同一内存地址。

逃生内存泄漏地狱

结构不是按设计使用引用,这使它们不受内存链接的影响。 大!

你知道吗

Swift主要使用值类型。 与目标C相反!

资源资源

https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html