Swift 中的结构体和类的区别

结构体和类都是定义数据模型的方式,但在Swift中它们有一些重要的区别。

定义方式

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

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

class Person {
  var name = ""
}

值语义

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

结构体在传递和赋值时会复制一份值:

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

类只会传递引用,相同实例会共享状态:

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

值语义更加安全。

继承关系

类可以建立继承层级和多态,结构体不能继承。

构造过程

结构体有默认成员构造器,类需要自定义构造过程。

总结

根据需要选择使用结构体或类,发挥它们各自的长处可以编写出更合理的代码。