结构体和类都是定义数据模型的方式,但在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也被修改
值语义更加安全。
继承关系
类可以建立继承层级和多态,结构体不能继承。
构造过程
结构体有默认成员构造器,类需要自定义构造过程。
总结
根据需要选择使用结构体或类,发挥它们各自的长处可以编写出更合理的代码。