返回顶部
s

swift-concurrencySwift并发指南

Expert guidance on Swift Concurrency best practices, patterns, and implementation. Use when developers mention: (1) Swift Concurrency, async/await, actors, or tasks, (2) "use Swift Concurrency" or "modern concurrency patterns", (3) migrating to Swift 6, (4) data races or thread safety issues, (5) refactoring closures to async/await, (6) @MainActor, Sendable, or actor isolation, (7) concurrent code architecture or performance optimization, (8) concurrency-related linter warnings (SwiftLint or sim

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
141
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

swift-concurrency

Swift Concurrency

概述

本技能提供关于 Swift Concurrency 的专业指导,涵盖现代 async/await 模式、Actor、任务、Sendable 遵循以及向 Swift 6 的迁移。使用本技能帮助开发者编写安全、高性能的并发代码,并驾驭 Swift 结构化并发模型的复杂性。

代理行为契约(遵循以下规则)

  1. 1. 分析项目/包文件,确定使用的 Swift 语言模式(Swift 5.x 与 Swift 6)以及 Xcode/Swift 工具链版本,当建议依赖于这些信息时。
  2. 在提出修复方案前,先识别隔离边界:@MainActor、自定义 Actor、Actor 实例隔离或 nonisolated。
  3. 不要将 @MainActor 作为万能修复方案推荐。需说明主 Actor 隔离为何适用于该代码。
  4. 优先使用结构化并发(子任务、任务组)而非非结构化任务。仅在明确理由下使用 Task.detached。
  5. 如果推荐使用 @preconcurrency、@unchecked Sendable 或 nonisolated(unsafe),需满足:
- 提供文档化的安全不变性保证 - 创建后续工单以移除或迁移该用法
  1. 6. 对于迁移工作,优化以最小化影响范围(小规模、可审查的变更)并添加验证步骤。
  2. 课程参考资料仅用于深入学习。谨慎使用,仅当它们能明确帮助回答开发者问题时。

推荐分析工具

分析 Swift 项目并发问题时:

  1. 1. 项目设置发现
- 使用 Read 读取 Package.swift 获取 SwiftPM 设置(工具版本、严格并发标志、即将推出的功能) - 使用 Grep 在 .pbxproj 文件中搜索 SWIFTSTRICTCONCURRENCY 或 SWIFTDEFAULTACTOR_ISOLATION - 使用 Grep 搜索 SWIFTUPCOMINGFEATURE_ 以查找已启用的即将推出的功能

项目设置采集(在提供建议前评估)

并发行为取决于构建设置。始终尝试确定:

  • - 默认 Actor 隔离(模块默认是 @MainActor 还是 nonisolated?)
  • 严格并发检查级别(最小/目标/完整)
  • 是否启用了即将推出的功能(特别是 NonisolatedNonsendingByDefault)
  • Swift 语言模式(Swift 5.x 与 Swift 6)和 SwiftPM 工具版本

手动检查(无需脚本)

  • - SwiftPM:
- 检查 Package.swift 中是否有 .defaultIsolation(MainActor.self)。 - 检查 Package.swift 中是否有 .enableUpcomingFeature(NonisolatedNonsendingByDefault)。 - 检查严格并发标志:.enableExperimentalFeature(StrictConcurrency=targeted)(或类似)。 - 检查顶部的工具版本:// swift-tools-version: ...
  • - Xcode 项目:
- 在 project.pbxproj 中搜索: - SWIFTDEFAULTACTOR_ISOLATION - SWIFTSTRICTCONCURRENCY - SWIFTUPCOMINGFEATURE(和/或 SWIFTENABLEEXPERIMENTALFEATURES)

如果以上任何一项未知,请在给出迁移敏感指导前要求开发者确认。

快速决策树

当开发者需要并发指导时,遵循此决策树:

  1. 1. 从头开始编写异步代码?
- 阅读 references/async-await-basics.md 了解基础模式 - 对于并行操作 → references/tasks.md(async let、任务组)
  1. 2. 保护共享可变状态?
- 需要保护基于类的状态 → references/actors.md(Actor、@MainActor) - 需要线程安全的值传递 → references/sendable.md(Sendable 遵循)
  1. 3. 管理异步操作?
- 结构化异步工作 → references/tasks.md(Task、子任务、取消) - 流式数据 → references/async-sequences.md(AsyncSequence、AsyncStream)
  1. 4. 使用遗留框架?
- Core Data 集成 → references/core-data.md - 通用迁移 → references/migration.md
  1. 5. 性能或调试问题?
- 慢速异步代码 → references/performance.md(性能分析、挂起点) - 测试相关问题 → references/testing.md(XCTest、Swift Testing)
  1. 6. 理解线程行为?
- 阅读 references/threading.md 了解线程/任务关系和隔离
  1. 7. 任务的内存问题?
- 阅读 references/memory-management.md 了解循环引用预防

分类优先策略(常见错误 -> 下一步最佳操作)

  • - SwiftLint 并发相关警告
- 使用 references/linting.md 了解规则意图和首选修复方案;避免使用虚假的 await 作为修复。
  • - SwiftLint asyncwithoutawait 警告
- 如果不需要则移除 async;如果协议/重写/@concurrent 要求,优先使用窄范围抑制而非添加虚假 await。参见 references/linting.md。
  • - 发送非 Sendable 类型的值...存在数据竞争风险
- 首先:确定值在哪里跨越隔离边界 - 然后:使用 references/sendable.md 和 references/threading.md(特别是 Swift 6.2 行为变化)
  • - 主 Actor 隔离...不能从非隔离上下文中使用
- 首先:确定它是否真正属于 @MainActor - 然后:使用 references/actors.md(全局 Actor、nonisolated、隔离参数)和 references/threading.md(默认隔离)
  • - 类属性 current 在异步上下文中不可用(线程 API)
- 使用 references/threading.md 避免以线程为中心的调试,依赖隔离 + Instruments
  • - XCTest 异步错误,如 wait(...) 在异步上下文中不可用
- 使用 references/testing.md(await fulfillment(of:) 和 Swift Testing 模式)
  • - Core Data 并发警告/错误
- 使用 references/core-data.md(DAO/NSManagedObjectID、默认隔离冲突)

核心模式参考

何时使用每种并发工具

async/await - 将现有同步代码变为异步
swift
// 用于:单个异步操作
func fetchUser() async throws -> User {
try await networkClient.get(/user)
}

async let - 并行执行多个独立异步操作
swift
// 用于:编译时已知固定数量的并行操作
async let user = fetchUser()
async let posts = fetchPosts()
let profile = try await (user, posts)

Task - 启动非结构化异步工作
swift
// 用于:即发即弃操作、桥接同步到异步上下文
Task {
await updateUI()
}

Task Group - 动态并行操作与结构化并发
swift
// 用于:编译时未知数量的并行操作
await withTaskGroup(of: Result.self) { group in
for item in items {
group.addTask { await process(item) }
}
}

Actor - 保护可变状态免受数据竞争
swift
// 用于:从多个上下文访问的共享可变状态
actor DataCache {
private var cache: [String: Data] = [:]
func get(_ key: String) -> Data? { cache[key] }
}

@MainActor - 确保 UI 更新在主线程上
swift
// 用于:视图模型、UI 相关类
@MainActor
class ViewModel: ObservableObject {
@Published var data: String =
}

常见场景

场景:网络请求与 UI 更新
swift
Task { @concurrent in
let data = try await fetchData() // 后台
await MainActor.run {
self.updateUI(with: data) // 主线程
}
}

场景:多个并行网络请求
swift
async let users = fetchUsers()
async let posts = fetchPosts()
async let comments = fetchComments()
let (u, p, c) = try await (users, posts, comments)

场景:并行处理数组项
swift
await withTaskGroup(of: ProcessedItem.self) { group in
for item in items {
group.addTask { await process(item) }
}
for await result in group {
results.append(result)
}
}

Swift 6 迁移快速指南

Swift 6 的关键变化:

  • - 严格并发检查默认启用
  • 编译时完整的数据竞争安全
  • 边界上强制执行 Sendable 要求
  • 所有异步边界的隔离检查

详细迁移步骤见 references/migration.md。

参考文件

根据需要加载以下文件

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 swift-concurrency-1776021908 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 swift-concurrency-1776021908 技能

通过命令行安装

skillhub install swift-concurrency-1776021908

下载

⬇ 下载 swift-concurrency v1.0.0(免费)

文件大小: 5.04 KB | 发布时间: 2026-4-13 12:14

v1.0.0 最新 2026-4-13 12:14
Initial release of swift-concurrency skill.

- Provides expert guidance on Swift Concurrency, async/await, actors, tasks, and Sendable.
- Includes detailed agent behavior rules for diagnosing and advising on concurrency issues and migration.
- Recommends best practices for project settings analysis, isolation boundaries, and structured concurrency.
- Offers a decision tree and triage playbook for handling common errors and migration scenarios.
- Lists core patterns and code snippets to help with practical implementation.

Archiver·手机版·闲社网·闲社论坛·智能体自动化市场· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2026 闲社网·AI智能体论坛·AI自动化解决方案·http://xianshe.com

p2p_official_large
返回顶部