美文网首页
Structures vs Classes

Structures vs Classes

作者: _浅墨_ | 来源:发表于2021-12-14 19:13 被阅读0次
Structures 结构体

结构体是值类型。每次将其值传递给变量、常量或函数时,都会为其分配一个副本。

Swift 中的所有基本或原始类型都是结构体。例如 Integers,Doubles,Floats,Strings 等等。

我们通过称为初始化(initialization)创建结构体实例。只有在第一次使用之前,结构体的所有属性都设置了初始值,初始化才能成功。为了成功初始化,我们这样做:

  1. 为结构的所有属性分配默认值
  2. 通过自定义初始化将初始值传递给没有默认值的属性
  3. 通过成员初始化(memberwise initialization),如果没有设置自定义初始化程序,它会自动设置

结构体实例的可变性取决于它是传递给变量还是常量。如果将结构体传递给常量,则即使该属性被声明为变量,它的所有属性也会变得不可变。

self 在结构体的方法中是不可变的。这意味着不能在结构体的方法中改变属性。为了可以改变属性,我们需要将属性标记为 mutating。

Classes 类

类是引用类型。当我们将实例传递给变量或常量时,会分配对同一实例的引用。多个常量和变量可以引用一个类的同一个实例。这称为引用计数。

类的实例是通过初始化创建的。与结构体不同,类没有成员初始化。这意味着我们需要为类所有的属性设置默认值,或者至少在初始化时提供这些值,以便成功创建类的实例。

类比结构体有更多的能力,类允许子类继承父类行为。类还允许覆盖从其它类继承的方法。

可以检查和解释(check and interpret)类的类型。这称为类型转换(type casting)。我们使用关键字 is 和 as 来实现这一点。is 关键字用于检查类是否属于某个子类类型。as 关键字用于将类引用为某个子类类型。

Structures vs Classes

以下情况下使用结构:

  1. 如果打算封装一些相对简单的数据类型,应该使用结构体。
  2. 如果打算复制而不是引用值,那么应该使用结构体。
  3. 如果结构存储的属性本身是值类型。
  4. 该结构不需要从现有类型继承属性或行为。

其它情况使用类。

2021.12.14 夜
上海 虹桥

相关文章

网友评论

      本文标题:Structures vs Classes

      本文链接:https://www.haomeiwen.com/subject/gwhyfrtx.html