关于 coding-swift
coding-swift 是面向 AI 系统的 Swift 6 开发技能,适用于 iOS 和 macOS 项目。内容涵盖并发、泛型、包管理与测试。
主要功能
- 01async/await 与 Actor 并发
- 02泛型与属性包装器
- 03Swift Package Manager 依赖管理
- 04使用 XCTest 测试异步代码
适用场景
- 01构建异步网络请求应用
- 02使用 Actor 安全管理共享状态
- 03更新代码以符合 Sendable
- 04编辑 SPM 依赖并运行测试
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill coding-swift安装后在 Claude Code 中输入/coding-swift确认已加载。
详细介绍
用途
此技能使 AI 能够协助 Swift 6 编程,重点关注 iOS 和 macOS 开发的现代功能,包括并发、泛型和包管理。
适用场景
在涉及 Swift 6 代码的任务中使用此技能,例如构建基于 async/await 的应用、实现 actor 以确保线程安全,或管理 iOS/macOS 项目中的 Swift Package Manager(SPM)依赖项。当现有代码需要更新以符合 Sendable 要求或增强泛型功能时,也可使用此技能。
主要功能
- Async/await:用于执行非阻塞代码,例如处理网络请求。
- Actors:用于安全地管理共享状态,确保符合 Sendable 要求。
- Generics:通过类型约束实现可复用代码,例如定义泛型结构体。
- Property wrappers:简化属性管理,例如用于验证。
- Result builders:构建 SwiftUI 视图等复杂类型。
- SPM:通过 Package.swift 文件管理依赖项。
- 测试:使用 XCTest 为异步代码编写单元测试。
使用模式
完成任务时,使用 Swift 6 惯用写法组织代码:对 I/O 操作使用异步函数,将共享状态封装在 actor 中,并利用泛型处理集合。使用 SPM 时,编辑 Package.swift 并运行构建。始终检查是否符合 Sendable 要求,以避免数据竞争。与 Xcode 集成时,在项目设置中设置编译器版本,使用 Swift 6 工具链编译项目。
常用命令/API
- 构建 Swift 包:在项目目录中运行
swift build --configuration release。 - 运行测试:在 SPM 项目中执行
swift test --enable-test-discovery。 - Async API 用法:定义如下异步函数
func fetchData() async throws -> Data { ... },并使用Task { let data = try await fetchData() }调用它。 - Actor 示例:使用
actor MyActor { var state: Int = 0; func update() { state += 1 } }创建 actor。 - Generics API:使用如下泛型函数
func swap<T>(_ a: inout T, _ b: inout T) { let temp = a; a = b; b = temp }。 - Property wrapper:定义方式如下:
@propertyWrapper struct Clamped<Value: Comparable> { var wrappedValue: Value { ... } }。 - SPM 配置:按以下格式编辑 Package.swift:
let package = Package(name: "MyApp", dependencies: [.package(url: "https://github.com/apple/swift-algorithms", from: "1.0.0")])。
集成说明
集成此技能时,请确保已安装 Swift 6 工具链(例如,通过 Xcode 15+)。对于外部服务,可通过环境变量(如 $SWIFT_API_KEY)设置身份验证,以便在代码中调用 API,例如:let apiKey = ProcessInfo.processInfo.environment["SWIFT_API_KEY"]。与其他技能结合使用时,可在 Xcode 的 "Swift Packages" 标签页中添加 Swift 包。对于并发,请确保在异步上下文中使用 actors,以避免运行时错误。
错误处理
在 Swift 6 中,使用 do-catch 块处理错误,并配合异步函数,例如:
do {
let result = try await someAsyncFunction()
} catch let error as NSError {
print("Error code: \(error.code)")
}
若出现 Sendable 错误,请为函数添加 @Sendable,并修复不符合要求的闭包。对于 SPM,请解析 swift build 输出中的构建错误,例如查找 "error: dependency not found",并通过更新 Package.swift 解决。始终使用 guard 语句处理可选值,以防止崩溃。
具体使用示例
- 异步网络请求:要从 API 获取数据,请使用:
func fetchUser() async throws -> User { let url = URL(string: "https://api.example.com/user")!; let (data, _) = try await URLSession.shared.data(from: url); return try JSONDecoder().decode(User.self, from: data) }。在任务中调用它:Task { do { let user = try await fetchUser(); print(user.name) } catch { print(error) } }。 - 用于共享状态的 Actor:要安全地管理计数器,请定义:
actor Counter { private var value = 0; func increment() { value += 1 } }。使用方式如下:let counter = Counter(); Task { await counter.increment(); print(await counter.value) },以确保线程安全。
图关系
- 相关项:coding-general(共享集群)、ios-development(通过标签 "ios")、macos-app(通过标签 "macos")、concurrency-handling(通过嵌入提示 "concurrency actor async")。
- 集群:与 "coding" 集群相连,涵盖更广泛的编程技能。
- 标签:与标记为 "swift" 的技能相关联,适用于特定语言的任务;与标记为 "spm" 的技能相关联,适用于包管理。