Swift 中的类和结构体有什么区别?

swiftserver side programmingprogramming更新于 2025/10/10 21:22:17

本指南将介绍 Swift 编程语言中有哪些类和函数。此外,它们之间又有什么区别?

大多数情况下,我们在项目中编写代码时,都需要处理类和结构体。诚然,这两个特性是 Swift 中最重要的特性。在实时应用程序中,无论你想编写什么,都需要创建一个类来分配职责。

如果我们已经有一个类选项,我们需要理解为什么以及何时应该使用结构体。

结构体是 Swift 语言中的基本概念之一,它们可以帮助你的代码更具可重用性、灵活性和更低的耦合度。此外,它们还能帮助你提升作为应用程序开发者的技能。具体是如何做到的呢?让我们来看看。

首先,我们应该了解类和结构体的共同特征是什么 -

两者都可以以属性(变量和常量)的形式存储信息。

  • 两者都可以定义函数来执行某些任务。

  • 两者都可以根据协议实现。

  • 我们可以为两者创建扩展。

  • 我们可以定义初始化函数来设置属性。

类具有而结构体不具备的功能

  • 您可以通过继承超类来创建子类。

  • 您可以对类执行 deinit() 操作。这意味着类可以被反初始化。

  • 类是引用类型。

什么时候应该使用结构体?

Swift 中的结构体在很多情况下都很有用。具体如下:

  • 简单数据类型

    如果您不需要在对象之间构建复杂的关系,则应该使用结构体。这意味着,当您需要在代码中传递没有依赖关系的对象时,使用结构体会更简单。

  • 不需要继承

    我们知道结构体不支持继承。基于此,您应该在一个简单的场景中使用结构体。显然,当您不需要继承时,使用结构体会更简单。

  • 线程安全

    代码中的许多功能在不同的线程上运行。当实例被共享并可从多个线程访问时,可能会出现死锁或竞争条件。在这种情况下,结构体是线程安全的。

  • 主要结构化场景

    创建类或结构体的目的是存储信息和执行操作。我们主要需要关于值类型的信息,例如字符串、整数、布尔值等。显然,结构体最适合这种场景。

什么时候应该使用类?

我们知道类具有一些结构体所不具备的基本特性 -

  • 类可以继承自另一个类,而结构体则无法做到这一点。使用类,您可以编写类 MyViewController -UIViewController 来创建 UIViewController 的子类。不过,结构体可以实现协议,可以扩展,还可以与泛型一起使用!

  • 类可以被反初始化,也就是说,它们可以实现 deinit 函数。此外,你可以对同一个类创建一个或多个引用(也就是说,类是一种引用类型)。

  • 类本身就带有身份标识的概念,因为它们是引用类型。使用身份运算符 ===,你可以检查两个引用(变量、常量、属性等)是否指向同一个对象。

  • 如果要在 Swift 和 Objective-C 之间进行互操作,请使用类。如果需要与 Objective-C 互操作,则需要使用类。例如,如果您想在 Realm 数据模型中使用 @objc 和 dynamic,则该模型必须是一个类。

让我们通过示例来了解类和结构之间的区别 -

示例

class StudentClass {
   var name: String
   var grade: Int
   init(name: String, grade: Int) {
      self.name = name
      self.grade = grade
   }
}
let student1 = StudentClass(name: "Ramesh Chandra", grade: 9)
let student2 = student1
student2.name = "Ramesh Kant"
print("student1 name: \(student1.name)")
print("student2 name: \(student2.name)")

struct StudentStruct {
   var name: String
   var grade: Int
}
let student3 = StudentStruct(name: "Anish Sharma", grade: 8)
var student4 = student3
student4.name = "Anish Gupta"
print("student3 name: \(student3.name)")
print("student4 name: \(student4.name)")

输出

student1 name: Ramesh Kant
student2 name: Ramesh Kant
student3 name: Anish Sharma
student4 name: Anish Gupta

解释

在上面的例子中,我们创建了一个名为 StudentClass 的类和一个名为 StudentStruct 的结构体。现在您需要理解以下几点:

  • 结构体默认提供初始化函数,而类则需要定义它们。

  • 实例(student1 和 student2)是常量,即使属性发生变化也不需要变量。

  • 对于结构体,我们将 student3 设置为常量,因为不需要更改属性。但是,另一个名为 student4 的对象是变量,因为我们必须更改属性。

  • 最后,您可以看到输出。显然,类对象共享内存位置,这就是为什么类的另一个实例能够反映出这种变化的原因。

类和结构的区别

总结类和结构的区别

比较 类 结构体
类型 类是引用类型。 结构体是值类型。
继承 类具有继承功能,允许一个类继承另一个类的特性。 结构体不支持继承。
存储 类实例存储在堆上。 结构体属性存储在堆栈。
初始化程序 我们必须手动定义初始化程序。 结构体会自动获取一个默认初始化程序。
线程安全 类并非完全线程-安全。 结构体始终是线程-安全或单例模式。

结论

您学习了何时使用类和结构体。基于此,您可以决定使用哪一个。

继承是类和结构体之间最显著的区别。使用类,您可以清晰地定义子类和超类之间的父子关系。

当您遵循结构体默认方法时,您可以保留以后升级到类的选项。



相关文章



关于我们 | 隐私条款 | 学习路线
返回顶部