Z
ZHANK
面向协议

结构体 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