
claude-skills 之 Swift Expert面向 SwiftUI 与 async/await 的协议导向开发指南【免费下载链接】claude-skills67 Specialized Skills for Full-Stack Developers. Transform Claude Code into your expert pair programmer.项目地址: https://gitcode.com/GitHub_Trending/claud/claude-skills本指南以 claude-skills 仓库中的 Swift Expert 技能定义 为核心系统讲解该技能如何指导 Claude Code 完成 iOS/macOS/watchOS/tvOS 应用的架构分析、协议设计、SwiftUI 状态管理、并发与线程安全处理以及 XCTest 测试编写。读完本文你将掌握该技能的完整调用流程、五大核心参考文档的关键模式以及如何用正确/错误对比的方式规避 Swift 开发中的常见陷阱。Swift Expert 技能在仓库中的定位claude-skills 是面向全栈开发者的 Claude Code 技能集合共包含 67 个专项技能见 README。其中swift-expert属于language语言领域、implementation实现作用域的专项技能output-format为code即它的产出以代码为核心。从 技能定义文件 的 YAML frontmatter 可以看到它的设计意图name: swift-expert description: Builds iOS/macOS/watchOS/tvOS applications, implements SwiftUI views and state management, designs protocol-oriented architectures, handles async/await concurrency, implements actors for thread safety, and debugs Swift-specific issues. Use when building iOS/macOS applications with Swift 5.9, SwiftUI, or async/await concurrency. Invoke for protocol-oriented programming, SwiftUI state management, actors, server-side Swift, UIKit integration, Combine, or Vapor. metadata: version: 1.1.0 domain: language triggers: Swift, SwiftUI, iOS development, macOS development, async/await Swift, Combine, UIKit, Vapor role: specialist scope: implementation output-format: codedescription中的 Use when... 从句是技能的触发条件当请求涉及Swift 5.9、SwiftUI、async/await 并发、协议导向编程、actors、服务端 SwiftVapor、UIKit 集成或 Combine时该技能会被自动激活。这也与 技能校验脚本 中对description-format的检查逻辑一致——每个技能描述都必须包含 Use when 触发从句。在 SKILLS_GUIDE.md 的技能决策树中Swift Expert 的定位明确语言选择iOS/macOS→ Swift Expert语言专项示例SwiftUI reactive patterns→ Swift Expert移动开发组合React Native Expert / Flutter Expert API Designer DevOps EngineerSwift Expert 同理适用于 Apple 平台组合Core Workflow五步核心工作流技能文档规定了五步标准工作流覆盖从架构分析到测试验证的完整链路Architecture Analysis架构分析— 识别平台目标iOS/macOS/watchOS/tvOS、依赖项与设计模式Design Protocols协议设计— 创建带关联类型associated types的协议优先 APIImplement实现— 编写基于 async/await 与值语义的类型安全代码Optimize优化— 使用 Instruments 剖析性能确保线程安全Test测试— 使用 XCTest 与异步模式编写全面测试技能文档还内置了三个验证检查点Validation checkpoints用于在每步之后快速反馈问题阶段命令目的步骤 3 之后swift build验证编译通过步骤 4 之后swift build -warnings-as-errors暴露 actor 隔离与 Sendable 相关警告步骤 5 之后swift test确认所有异步测试通过其中swift build -warnings-as-errors特别值得注意Swift 并发检查中大量问题如Sendable不一致、actor 隔离违规以警告形式出现把警告升级为错误可以在 CI 阶段就拦截这些问题而非留到运行时才暴露。Reference Guide按需加载的五大参考模块Swift Expert 采用路由表式参考架构——主 SKILL.md 不承载全部知识而是按上下文场景分发到references/目录下的独立文件。技能定义中的路由表如下主题参考文件加载时机SwiftUIreferences/swiftui-patterns.md构建视图、状态管理、修饰符并发references/async-concurrency.mdasync/await、actors、结构化并发协议references/protocol-oriented.md协议设计、泛型、类型擦除内存references/memory-performance.mdARC、weak/unowned、性能优化测试references/testing-patterns.mdXCTest、异步测试、mock 策略这正是 claude-skills 的 Context-Aware Activation 机制Claude 根据请求内容加载对应的参考文件。接下来我们逐个深入这五个模块。SwiftUI 状态管理与视图组合swiftui-patterns.md 系统梳理了 SwiftUI 的五个状态工具及其适用场景State— 视图本地的简单值类型状态Binding— 子视图与父视图之间的双向数据流StateObject— 视图自身创建的 ObservableObject 引用类型ObservedObject— 外部传入的 ObservableObjectEnvironmentObject— 依赖注入式的全局共享状态// State for local view state struct CounterView: View { State private var count 0 var body: some View { VStack { Text(Count: \(count)) Button(Increment) { count 1 } } } } // Binding for two-way data flow struct ToggleView: View { Binding var isOn: Bool var body: some View { Toggle(Enable Feature, isOn: $isOn) } } // EnvironmentObject for dependency injection struct AppView: View { EnvironmentObject var appState: AppState }参考文档还覆盖了自定义 ViewModifier通过CardModifier与cardStyle()扩展实现样式复用、自定义环境值通过EnvironmentKey协议定义ThemeKey、PreferenceKey子视图向父视图上报尺寸等数据、隐式动画与显式动画.animation(_:value:)与withAnimation、自定义过渡AnyTransition.slide.combined(with: .opacity)以及 iOS 16 的Layout协议——通过实现sizeThatFits与placeSubviews构建瀑布流等自定义布局。异步集成与性能要点struct AsyncDataView: View { State private var data: [Item] [] State private var isLoading false var body: some View { List(data) { item in Text(item.title) } .task { await loadData() } .refreshable { await loadData() } } private func loadData() async { isLoading true defer { isLoading false } do { data try await API.fetchItems() } catch { print(Error: \(error)) } } }参考文档给出的性能原则包括State用于简单值类型、StateObject用于自建引用类型、ObservedObject用于传入的引用类型、优先Environment避免属性逐层透传、昂贵视图使用.equatable()修饰符、用id()控制视图身份、用task(id:)取消并重启异步任务、避免在body中计算昂贵值。async/await 并发模型async-concurrency.md 是并发主题的完整参考涵盖六大部分基础写法异步函数、async let与withThrowingTaskGroup并行加载多个用户// Multiple concurrent operations func fetchMultipleUsers(ids: [Int]) async throws - [User] { try await withThrowingTaskGroup(of: User.self) { group in for id in ids { group.addTask { try await fetchUser(id: id) } } var users: [User] [] for try await user in group { users.append(user) } return users } }Actors 线程安全参考文档给出了一个带去重请求合并能力的UserCacheactor——先查缓存命中直接返回未命中时检查是否已有进行中的 Task有则复用同一个 Task避免重复请求全部完成后写入缓存并清理。MainActor 与 UI 更新UI 相关的类用MainActor标注网络请求等异步工作在后台线程执行属性更新自动回到主线程nonisolated关键字则允许纯计算函数在任何线程运行。结构化并发withThrowingTaskGroup处理动态数量的下载任务async let并行加载 dashboard 的用户、帖子与通知。任务管理Task.detached(priority: .background)用于脱离上下文的独立任务参考文档明确提示应谨慎使用因为它会破坏结构化并发长任务中通过Task.checkCancellation()与Task.isCancelled检查取消状态任务按priority: .high/.low分级。AsyncSequence 与 Sendable自定义AsyncSequence如NumberSequence逐元素产生整数、基于NotificationCenter的AsyncStream以及Sendable协议——值类型struct User: Sendable天然满足要求可变状态的类需借助锁 unchecked Sendable参考文档强调谨慎使用。Continuations 桥接withCheckedThrowingContinuation将基于回调的旧 API 包装成 async/await性能敏感场景可改用withUnsafeContinuation。但注意——主 SKILL.md 的正确/错误对比示例明确指出当某 API 已存在原生 async 版本时不应再用 continuation 去包装它。协议导向编程POPprotocol-oriented.md 详细展开 Swift 最具特色的编程范式协议基础需求声明var boundingBox: CGRect { get }与协议扩展提供的默认实现extension Drawable { func draw... }关联类型protocol Container { associatedtype Item ... }配合where Item: Equatable的条件扩展实现firstIndex(of:)协议组合typealias Person Named Aged函数参数用some Named Aged接收泛型约束class RepositoryModel: Codable Identifiable、不透明返回类型some CollectionSwift 5.7 主关联类型protocol DataSourceElement类型擦除协议带关联类型后无法作为独立类型存储protocol can only be used as a constraint 错误通过AnyStorageT包装器将_store/_retrieve闭包存储起来实现擦除条件一致性extension Array: Summarizable where Element: Summarizable高级模式幻影类型phantom typesTemperatureCelsius与TemperatureFahrenheit防止单位混淆、协议继承、追溯建模extension Int: Identifiable最佳实践清单强调优先用协议而非基类做抽象、协议保持单一职责、优先组合小协议而非拼大协议、用some Protocol隐藏实现细节、必要时使用类型擦除。内存与性能ARCmemory-performance.md 覆盖 ARC 下的四大主题weak 与 unownedPerson与Apartment相互引用时用weak var tenant打破保留环unowned用于目标必然比持有者活得久的强约束场景CreditCard.customerSwift 5 支持unowned var nextCourse: Course?可选 unowned。闭包捕获列表这是保留环的高发区参考文档给出了三种写法的对比// Strong reference cycle - DataManager wont be deallocated NetworkManager.fetch { response in self.data response // self is captured strongly } // Weak self - breaks cycle NetworkManager.fetch { [weak self] response in guard let self self else { return } self.data response } // Unowned self - when self definitely outlives closure NetworkManager.fetch { [unowned self] response in self.data response // Crashes if self is deallocated }值语义与写时复制COWstruct 集合天然 COW自定义类型可借助isKnownUniquelyReferenced实现写时复制仅当引用计数大于 1 时才深拷贝。性能优化技巧lazy var延迟昂贵计算、用compactMap避免循环内重复类型转换、优先 struct 数组连续内存而非 class 数组指针间接寻址、循环内用append替代字符串拼接配合reserveCapacity、ContiguousArray与Set/Dictionary的 O(1) 查找、用enumerated()替代下标循环。Instruments 剖析通过os_signpost为关键代码段添加剖析标记用autoreleasepool包裹内存密集型循环监听UIApplication.didReceiveMemoryWarningNotification清理图片缓存。参考文档还给出了Package.swift中通过swiftSettings设置-O优化级别、inline(__always)与_specialize等优化属性。XCTest 测试模式testing-patterns.md 提供了一套完整的测试策略XCTest 基础setUp/tearDown管理被测对象sutGiven-When-Then 三段式断言XCTUnwrap安全解包可选值异步测试测试函数直接声明async throws用withThrowingTaskGroup实现withTimeout超时辅助函数async let并行测试多个请求Mock 与测试替身通过协议定义DataService接口生产环境用APIDataService测试环境用MockDataService记录调用并注入预置结果区分 Spy记录交互、Stub预置响应、Fake简化工作实现性能测试measure块 XCTClockMetric/XCTCPUMetric/XCTMemoryMetric/XCTStorageMetric组合UI 测试XCUIApplication驱动真实交互流程登录流程、按钮可用性Actor 测试并发调用 actor 的increment()100 次后断言最终值为 101验证隔离性快照测试SnapshotTesting断言按钮外观、ViewController 布局与暗色模式组织方式用// MARK:按创建/校验/持久化分组测试用例抽公共 helper 方法代码模式四组正确/错误对比SKILL.md 的核心价值在于给出了四组浓缩的✅ DO / ❌ DONT对比直接可作为 Agent 生成代码时的行为准则1. async/await — 正确与错误写法// ✅ DO: async/await with structured error handling func fetchUser(id: String) async throws - User { let url URL(string: https://api.example.com/users/\(id))! let (data, _) try await URLSession.shared.data(from: url) return try JSONDecoder().decode(User.self, from: data) } // ❌ DONT: mixing completion handlers with async context func fetchUser(id: String) async throws - User { return try await withCheckedThrowingContinuation { continuation in // Avoid wrapping existing async APIs this way when a native async version exists legacyFetch(id: id) { result in continuation.resume(with: result) } } }要点URLSession.shared.data(from:)已是原生异步 API无需用 continuation 包装。Continuation 只应用于桥接没有原生 async 版本的遗留回调 API参考 async-concurrency.md 的 Continuations 章节。2. SwiftUI 状态管理 — 新语法优先// ✅ DO: use Observable (Swift 5.9) for view models Observable final class CounterViewModel { var count 0 func increment() { count 1 } } struct CounterView: View { State private var vm CounterViewModel() var body: some View { VStack { Text(\(vm.count)) Button(Increment, action: vm.increment) } } } // ❌ DONT: reach for ObservableObject/Published when Observable suffices class LegacyViewModel: ObservableObject { Published var count 0 // Unnecessary boilerplate in Swift 5.9 }要点Swift 5.9 的Observable宏大幅简化了视图模型——不再需要ObservableObject协议、Published属性包装器与StateObject样板代码一个State private var vm即可驱动视图刷新。3. 协议导向架构 — 能力协议 vs 类继承// ✅ DO: define capability protocols with associated types protocol RepositoryEntity { associatedtype Entity: Identifiable func fetch(id: Entity.ID) async throws - Entity func save(_ entity: Entity) async throws } struct UserRepository: Repository { typealias Entity User func fetch(id: UUID) async throws - User { /* … */ } func save(_ user: User) async throws { /* … */ } } // ❌ DONT: use classes as base types when a protocol fits class BaseRepository { // Avoid class inheritance for shared behavior func fetch(id: UUID) async throws - Any { fatalError(Override required) } }要点用协议描述能力而非用基类描述血统。class BaseRepository中的Any返回值是典型的类型安全反模式协议 关联类型在编译期保留完整类型信息可结合 protocol-oriented.md 的类型擦除部分应对存储场景。4. Actor 线程安全 — 隔离 vs 手动加锁// ✅ DO: isolate mutable shared state in an actor actor ImageCache { private var cache: [URL: UIImage] [:] func image(for url: URL) - UIImage? { cache[url] } func store(_ image: UIImage, for url: URL) { cache[url] image } } // ❌ DONT: use a class with manual locking class UnsafeImageCache { private var cache: [URL: UIImage] [:] private let lock NSLock() // Error-prone; prefer actor isolation func image(for url: URL) - UIImage? { lock.lock(); defer { lock.unlock() } return cache[url] } }要点actor 把锁内建到语言层面——编译器保证隔离域内状态的互斥访问无需手工lock()/unlock()从根源上消除忘解锁、死锁等手动锁错误参考 async-concurrency.md 的 Actors 与 MainActor 章节。Constraints必须遵守与禁止事项SKILL.md 用两组约束约束 Agent 的代码输出构成了 Swift 代码评审的 checklistMUST DO必须做到恰当使用类型提示与类型推断遵循 Swift API 设计指南Swift API Design Guidelines异步操作统一使用async/await确保并发代码满足Sendable一致性默认使用值类型struct/enum使用 markdown 注释/// …为 API 编写文档横切关注点使用属性包装器property wrappers优化前先用 Instruments 剖析定位瓶颈MUST NOT DO禁止事项无正当理由使用强制解包!在闭包中制造保留环不当混用同步与异步代码忽略 actor 隔离警告不必要地使用隐式解包可选值IUO跳过错误处理存在 Swift 原生替代方案时仍套用 Objective-C 模式硬编码平台相关值这些约束与 memory-performance.md 的最佳实践清单、protocol-oriented.md 的 Prefer protocols over base classes 原则相互印证构成了技能输出的质量底线。Output Templates代码交付结构当 Agent 使用 Swift Expert 实现功能时输出必须包含五部分固定结构协议定义与类型别名Protocol definitions and type aliases模型类型Model types遵循值语义的 structs/classes视图实现SwiftUI views或视图控制器演示用测试Tests demonstrating usage架构决策简述Brief explanation of architectural decisions这一结构保证每次输出既是可编译运行的代码又是可读、可评审、可测试的完整交付物——协议先行定义契约模型遵循值语义视图聚焦展示测试验证行为最后用文字解释为什么这样设计。在 Claude Code 中的实际使用方式Swift Expert 作为 claude-skills 插件的一部分与全仓库技能一样通过插件系统安装安装方式见 QUICKSTART.md/plugin marketplace add jeffallan/claude-skills /plugin install fullstack-dev-skillsjeffallan安装后它是上下文感知自动激活的当你输入Build a SwiftUI view with async data loading或Refactor this class to use actors之类的请求时技能根据 frontmatter 中的 triggers 自动加载并进一步按 Reference Guide 路由表拉取对应的参考文件。从仓库结构看validate-skills.py 会强制检查每个技能的 YAML frontmattername、description、metadata.triggers/role/scope/output-format/domain、Core Workflow 是否恰好 5 步、references 目录是否存在且包含至少一个参考文件、以及参考路径能否从技能根目录解析——swift-expert完全满足这些校验其 5 个参考文件与路由表一一对应保证 Agent 加载时不出现悬空链接。小结Swift Expert 是 claude-skills 中面向 Apple 平台的语言专项技能它的设计精髓可以概括为三点流程化五步 Core Workflow 搭配三个 CLI 验证检查点swift build→swift build -warnings-as-errors→swift test让 AI 编码有可验证的质量闸门参考化主文件路由 5 个深度参考文件按需加载覆盖 SwiftUI、并发、协议、内存、测试五大主题避免上下文过载约束化MUST DO / MUST NOT DO 约束与四组正确/错误对比示例把 Swift 5.9 的最佳实践Observable、actors、值语义、协议优先直接内化为 Agent 的生成准则。对于使用 Claude Code 开发 iOS/macOS 应用的开发者这套技能定义本身就是一份值得研读的 Swift 现代开发规范而它的参考文档swiftui-patterns.md、async-concurrency.md、protocol-oriented.md、memory-performance.md、testing-patterns.md也可以作为团队内部 Swift 编码规范的蓝本独立使用。【免费下载链接】claude-skills67 Specialized Skills for Full-Stack Developers. Transform Claude Code into your expert pair programmer.项目地址: https://gitcode.com/GitHub_Trending/claud/claude-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考