Swifte 类与结构体区别

在Swift中,类(Class)和结构体(Struct)都是定义数据和功能的基础构建块,但两者在许多方面有重要的区别。理解类和结构体的区别可以帮助我们设计出更合适的程序架构。

定义方式

类使用class关键字定义,结构体使用struct定义:

class Person {
  // 类定义
} 

struct Point {
  // 结构体定义  
}

值语义

结构体是值类型,类是引用类型。结构体在传递和赋值时会进行值拷贝,类只传递引用。

let p = Point(x: 1, y: 2)
var p2 = p // 拷贝p的值
p2.x = 0 // 不影响p

let person = Person()
var person2 = person // 引用同一个实例
person2.name = "Bob" // person也受影响

值语义使结构体使用更简单安全。

继承

类可以定义继承关系和建立继承层级,而结构体不能被继承。

class Vehicle {
  //...
}

class Car: Vehicle {
  // 继承Vehicle
}

struct Point {
  // 结构体不能继承
}

继承对类提供了更多弹性。

构造过程

结构体自动获得成员构造器,类需要自定义构造过程。

struct Point {
  var x = 0.0, y = 0.0
}

let origin = Point() // 自动构造器

class Person {
  var name = ""

  init() {
    // 自定义构造过程 
  }
}

let person = Person()

这使得结构体更简单使用。

通过理解这些关键区别,我们可以更好地决定在Swift设计中使用类还是结构体。