ByteNoteByteNote

字节笔记本

2026年3月13日

Swift Concurrency Agent Skill:Swift 并发编程专家技能

API中转
¥120

本文介绍 Swift Concurrency Agent Skill,一个为 AI 编码工具提供专业 Swift 并发编程指导的技能包。该项目由 Swift 专家 AvdLee 开发,基于全面的 Swift Concurrency 课程精炼而成,为 AI 助手提供安全并发、性能优化和 Swift 6+ 迁移的专业知识。

项目简介

Swift Concurrency Agent Skill 是一个开源的 Agent Skill,采用 Agent Skills 开放格式。项目将深入的 Swift 并发编程课程知识转化为 AI 可用的简洁、可操作的参考资料,帮助开发者处理数据竞争、隔离错误、异步测试等问题,并实现高性能的并发模式。

核心特性

  • Swift 6 就绪:支持 Swift 6 严格并发迁移
  • 安全并发:避免数据竞争和并发错误
  • 性能优化:actors、tasks、Sendable 等高性能模式
  • 快速诊断:数据竞争和隔离错误的快速定位
  • 实战导向:基于真实项目经验
  • AI 友好:专为 AI 编码工具优化

适用人群

团队迁移

  • 迁移到 Swift 6/严格并发的团队
  • 需要安全默认值和快速分类的团队

开发调试

  • 调试数据竞争的开发者
  • 解决隔离错误
  • 修复不稳定的异步测试

性能优化

  • 追求性能优化的并发模式
  • actors、tasks、Sendable、async streams

安装指南

方法一:使用 skills.sh(推荐)

bash
npx skills add https://github.com/avdlee/swift-concurrency-agent-skill --skill swift-concurrency

方法二:Claude Code 插件

bash
# 添加 marketplace
/plugin marketplace add AvdLee/Swift-Concurrency-Agent-Skill

# 安装技能
/plugin install swift-concurrency@swift-concurrency-agent-skill

方法三:项目配置

在仓库的 .claude/settings.json 中配置:

json
{
  "enabledPlugins": {
    "swift-concurrency@swift-concurrency-agent-skill": true
  }
}

快速开始

bash
# 在 AI 助手中使用
> Use the swift concurrency skill and analyze the current project for Swift Concurrency improvements

# 示例任务
> 使用 swift concurrency 技能帮我检查这个 actor 是否正确实现
> 用 swift concurrency 技能优化这段异步代码
> 使用 swift concurrency 技能诊断数据竞争警告

核心概念

1. Actors

并发安全的状态封装:

swift
actor Counter {
    private var value = 0

    func increment() -> Int {
        value += 1
        return value
    }
}

2. Async/Await

现代异步编程:

swift
func fetchData() async throws -> Data {
    let url = URL(string: "https://api.example.com")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return data
}

3. Sendable

线程安全类型:

swift
struct User: Sendable {
    let id: String
    let name: String
}

4. Task Groups

结构化并发:

swift
func fetchImages(urls: [URL]) async throws -> [Image] {
    try await withThrowingTaskGroup(of: Image.self) { group in
        for url in urls {
            group.addTask {
                try await fetchImage(url: url)
            }
        }
    }
}

5. Async Streams

异步序列处理:

swift
for await value in asyncStream {
    process(value)
}

Swift 6 迁移

阶段 1:准备

  1. 启用严格并发检查
  2. 审计共享可变状态
  3. 识别非 Sendable 类型

阶段 2:修复

  1. 修复数据竞争警告
  2. 实现 Sendable 协议
  3. 使用 actor 隔离状态

阶段 3:优化

  1. 性能分析
  2. 减少跨 actor 边界
  3. 优化并发模式

性能优化

1. 减少跨 Actor 边界

swift
// 好:批量处理
actor Processor {
    func process(_ items: [Item]) async {
        await storage.save(items)
    }
}

2. 使用 MainActor

swift
@MainActor
class ViewModel: ObservableObject {
    @Published var data: [Item] = []
}

3. 避免过度序列化

swift
// 好:并行执行
await withTaskGroup(of: Void.self) { group in
    for item in items {
        group.addTask {
            await process(item)
        }
    }
}

常见陷阱

1. Actor 外部持有引用

swift
// 错误
class Holder {
    let actor = MyActor()
    var state = actor.state  // ⚠️
}

2. 忘记 await

swift
// 错误
func update() {
    actor.update()  // ⚠️ 缺少 await
}

3. 循环依赖

swift
// 可能导致死锁
actor A {
    func b() async {
        await b.c()
    }
}

相关技能

作者的其他技能:

项目链接

分享: