结构体 struct
值类型 struct、mutating 可变方法、Memberwise 初始化器、Copy-on-Write
结构体 struct
Swift 的 struct 是值类型——赋值时拷贝。加上协议和扩展,struct 在很多场景替代了 class。
学完本章你将: 掌握值类型、mutating 方法、Memberwise 初始化器。
struct 定义
swift
struct Point {
var x: Double
var y: Double
// 计算属性
var distanceFromOrigin: Double {
(x * x + y * y).squareRoot()
}
// mutating —— 修改值类型的属性
mutating func moveBy(dx: Double, dy: Double) {
x += dx
y += dy
}
}
var p = Point(x: 3, y: 4) // Memberwise 初始化器(自动生成)
print(p.distanceFromOrigin) // 5.0
p.moveBy(dx: 1, dy: 2)
// p.x = 4, p.y = 6
值类型行为
swift
var a = Point(x: 0, y: 0)
var b = a // 拷贝!
b.x = 10 // 只改 b
print(a.x) // 0——a 没变
// 数组也是值类型
var arr1 = [1, 2, 3]
var arr2 = arr1
arr2.append(4)
print(arr1) // [1, 2, 3]——不变
struct vs class
swift
struct S { var x = 0 } // 值类型——栈分配、拷贝
class C { var x = 0 } // 引用类型——堆分配、共享
// Swift 社区建议:优先用 struct
// 需要引用语义或继承时才用 class