Agent skill · software engineering · affaan-m
swift-concurrency-6-2
Swift 6.2 可接近的并发性 — 默认单线程,@concurrent 用于显式后台卸载,隔离一致性用于主 actor 类型。
Why this skill is useful
Provides specific patterns and practices for implementing Swift 6.2 concurrency features that the AI wouldn't reliably generate on its own.
What it needs
About 3k tokens when loaded. Last updated 2026-08-06. 238,342 stars on the source repository.
What this skill does
Swift 6.2 可接近的并发 采用 Swift 6.2 并发模型的模式,其中代码默认在单线程上运行,并发是显式引入的。在无需牺牲性能的情况下消除常见的数据竞争错误。 何时启用 将 Swift 5.x 或 6.0/6.1 项目迁移到 Swift 6.2 解决数据竞争安全编译器错误 设计基于 MainActor 的应用架构 将 CPU 密集型工作卸载到后台线程 在 MainActor 隔离的类型上实现协议一致性 在 Xcode 26 中启用“可接近的并发”构建设置 核心问题:隐式的后台卸载 在 Swift 6.1 及更早版本中,异步函数可能会被隐式卸载到后台线程,即使在看似安全的代码中也会导致数据竞争错误: Swift 6.2 修复了这个问题:异步函数默认保持在调用者所在的 actor 上。 核心模式 — 隔离的一致性 MainActor 类型现在可以安全地符合非隔离协议: 编译器确保该一致性仅在主 actor 上使用: 核心模式 — 全局和静态变量 使用 MainActor 保护全局/静态状态: MainActor 默认推断模式 Swift 6.2 引入了一种模式,默认推断 MainActor — 无需手动标注: 此模式是选择启用的,推荐用于应用、脚本和其他可执行目标。 核心模式 — 使用 @concurrent 进行后台工作 当需要真正的并行性时,使用 @concurrent 显式卸载: 重要: 此示例需要启用“可接近的并发”构建设置 — SE-0466 (MainActor 默认隔离) 和 SE-0461 (默认非隔离非发送)。启用这些设置后,extractSticker 会保持在调用者所在的 actor 上,使得可变状态的访问变得安全。如果没有这些设置,此代码存在数据竞争 — 编译器会标记它。 要使用 @concurrent: 1. 将包含类型标记为 nonisolated 2. 向函数添加 @concurrent 3. 如果函数还不是异步的,则添加 async 4. 在调用点添加 await 关键设计决策 决策 原理 ---------- ----------- 默认单线程 最自然的代码是无数据竞争的;并发是选择启用的 异步函数保持在调用者所在的 actor 上 消除了导致数据竞争错误的隐式卸载 隔离的一致性 MainActor 类型可以符合协议,而无需不安全的变通方法 @concurrent 显式选择启用 后台执行是一种有意的性能选择,而非偶然 MainActor 默认推断 减少了应用目标中样板化的 @MainActor 标注 选择启用采用 非破坏性的迁移路径 — 逐步启用功能 迁移步骤 1. 在 Xcode 中启用:构建设置中的 Swift Compiler > Concurrency 部分 2. 在 SPM 中启用:在包清单中使用 SwiftSettings API 3. 使用迁移工具:通过 swift.org/migration 进行自动代码更改 4. 从 MainActor 默认值开始:为应用目标启用推断模式 5. 在需要的地方添加 @concurrent:先进行性能分析,然后卸载热点路径 6. …
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills affaan-m/swift-concurrency-6-2--67f441