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也会被修改
值语义比引用语义安全。
继承关系
类可以建立继承层级,获得多态特性。结构体不能被继承。
构造过程
结构体自动获得成员构造器,类需要自定义构造。
根据数据模型的行为选择使用结构体或类可以使代码更合理。