0Pricing
Swift Academy · 课时

使用值类型减少共享

优先使用 值类型 来避免意外共享:结构体和枚举在赋值时会复制,有助于实现隔离、可预测性和线程安全。

使用值类型减少共享 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 3 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 3 节课。

为什么使用值类型?

Swift 的结构体/枚举是值类型:赋值和传递都会创建副本。这样可以减少意外共享,也更容易推理状态。

引用共享(类)

类是引用类型:多个变量可以指向同一个实例,因此通过别名进行的修改会相互影响。

final class Bag {
    var items: [String]
    init(_ items: [String]) { self.items = items }
}
let a = Bag(["pen"])
let b = a            // REF COPY: a and b refer to the same object
b.items.append("book")
print(a.items)       // ["pen","book"] — mutated via b
print(b.items)

独立副本(结构体)

结构体在赋值时会复制。每个变量都拥有自己的数据,修改只会影响自身。

struct Point { var x: Int; var y: Int }
var p1 = Point(x: 1, y: 2)
var p2 = p1          // VALUE COPY: independent
p2.x = 99
print(p1.x, p2.x)    // 1, 99 — p1 unaffected

写时复制集合

数组/字典/集合是带有写时复制机制的值类型。当您修改一个被多个引用共享的数组时,Swift 会创建一个新副本。

var a1 = [1,2,3]
var a2 = a1      // copy-on-write handle
a2.append(4)     // triggers copy if a1 is uniquely referenced
print(a1)        // [1,2,3]
print(a2)        // [1,2,3,4]

纯风格更新

设计近似纯函数式的接口:接收一个值,并返回一个新值。调用方可以避免意外的共享修改。

struct Profile {
    var name: String
    var tags: [String]
}
func addTag(_ p: Profile, _ tag: String) -> Profile {
    var copy = p          // work on a value copy
    copy.tags.append(tag) // caller gets a new updated value
    return copy
}
let pA = Profile(name: "Ana", tags: [])
let pB = addTag(pA, "swift")
print(pA.tags)  // []
print(pB.tags)  // ["swift"]

明智选择

指导原则:

  • 对于较小的、不可变或只在本地修改的数据,优先使用结构体。
  • 当需要身份、共享的可变状态或继承时,使用类。
  • 值类型可以减少共享,也让并发行为更容易推理。

值类型与引用类型共享

快速检查:为什么值类型有助于避免非预期的共享?

回顾

回顾:结构体/枚举是值。使用它们可以尽量减少共享的可变状态。集合采用写时复制,因此修改不会让其他持有者感到意外。

常见问题解答

「使用值类型减少共享」课时是免费的吗?

是的 — 「使用值类型减少共享」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 3 节课。

「使用值类型减少共享」这节课中我会学到什么?

优先使用 值类型 来避免意外共享:结构体和枚举在赋值时会复制,有助于实现隔离、可预测性和线程安全。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 3 节。

「使用值类型减少共享」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. ARC 基础:strong / weak / unowned
  2. 保留环及使用 weak/unowned 打破它们
  3. 使用值类型减少共享
← 返回 Swift Academy