Swift中class和struct的区别

Swift提供了两种定义自定义数据模型的方法:类(class)和结构体(struct)。理解它们的区别可以帮助我们设计出更合理的代码架构。

定义方式

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

class Person {
  var name: String
}

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

类和结构体在语法上定义都很相似。

值语义

结构体是值类型,类是引用类型。

结构体在传递和赋值时会进行值拷贝:

var p1 = Point(x: 1, y: 1)
var p2 = p1
p2.x = 2 // 不会影响p1

类只传递引用,多个实例共享同一状态:

swift
let p1 = Person() var p2 = p1 p2.name = "John" // p1的name也会被修改

值语义比引用语义安全。

继承关系

类可以建立继承层级,获得多态特性。结构体不能被继承。

构造过程

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

根据数据模型的行为选择使用结构体或类可以使代码更合理。