关于 solid-swift
solid-swift 是面向 Swift 6 和 SwiftUI 项目的编码技能,通过模块化目录规则、SOLID/DRY 指南与代码模板约束实现方式。适用于需要一致架构与并发规范的 Swift 开发。
主要功能
- 01强制按功能模块组织目录
- 02提供 SOLID 原则参考
- 03规定文件大小与分层限制
- 04涵盖 Swift 并发模式
- 05提供常用代码模板
- 06检查并复用共享代码
适用场景
- 01为 SwiftUI 功能规划目录结构
- 02拆分过大的 View 或 ViewModel
- 03实现符合规范的并发代码
- 04添加功能前检查可复用组件
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ fusengine/ agents --skill solid-swift安装后在 Claude Code 中输入/solid-swift确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/anti-patterns.mdconcurrency-patterns.mddependency-inversion.mdinterface-segregation.mdliskov-substitution.mdopen-closed.mdsingle-responsibility.mdsolid-principles.mdreferences/templates/model.mdprotocol.mdservice.mdview.mdviewmodel.md详细介绍
为 Swift 6 和 SwiftUI(iOS 27+)项目强制执行 SOLID 和 DRY 原则:必须采用 Features/[Feature]/ 模块化目录结构(绝不使用扁平的 Sources/ 布局),严格限制文件大小(100 行,在 90 行时拆分,并为 Views/ViewModels/Services/Protocols 设置各层预算),将协议放在独立的 Protocols/ 目录中,ViewModel 使用 @Observable + @MainActor,模型使用 Sendable 结构体,并要求每个 View 都必须包含 #Preview。
涵盖全部五项 SOLID 原则,并提供专门的参考资料(SRP、OCP、LSP、ISP、DIP)、并发模式(actors、@MainActor、Sendable)、反模式目录,以及 View、ViewModel、Service、Protocol 和 Model 的代码模板。
要求在编写新代码前先搜索代码库中的可复用协议和服务,并在复制供 2 个或更多功能使用的逻辑前检查共享位置(Core/Extensions/、Core/Utilities/、Core/Protocols/)。
SOLID Swift - Apple 最佳实践 2026
Agent 工作流(必须)
进行任何实现之前,并行启动 3 个 Agent,每个 Agent 调用都必须指定一个 name:
- fuse-ai-pilot:explore-codebase - 分析现有架构
- fuse-ai-pilot:research-expert - 通过 Apple Docs MCP + Context7 验证 Swift/Apple 文档
- XcodeBuildMCP - 代码更改后进行构建验证。然后运行 fuse-ai-pilot:sniper。
DRY - 创建前先复用(必须)
编写任何新代码之前:
- 搜索代码库,查找类似的协议、服务或逻辑
- 检查共享位置:
Core/Extensions/、Core/Utilities/、Core/Protocols/ - 如果存在类似代码 -> 扩展/复用,而不是重复实现
- 如果代码将供 2 个或更多功能使用 -> 直接在
Core/中创建
架构(必须采用 Features 模块化结构)
| 层 | 位置 | 最大行数 |
|---|---|---|
| Views | Features/[Feature]/Views/ | 80 |
| ViewModels | Features/[Feature]/ViewModels/ | 100 |
| Services | Features/[Feature]/Services/ | 100 |
| Protocols | Features/[Feature]/Protocols/ | 30 |
| 共享代码 | Core/{Models,Protocols,Services,Extensions,Utilities}/ | - |
绝不使用扁平的 Sources/ 结构——始终采用 Features/[Feature]/
关键规则(必须)
| 规则 | 值 |
|---|---|
| 文件限制 | 100 行(在 90 行时拆分) |
| ViewModel | @MainActor @Observable |
| 协议 | 仅限 Features/[Feature]/Protocols/ 或 Core/Protocols/ |
| 模型 | Sendable 结构体 |
| 文档 | 所有公共 API 都添加 /// |
| 预览 | 每个 View 都必须包含 #Preview |
参考指南
概念
| 主题 | 参考资料 | 适用情况 |
|---|---|---|
| SOLID 概述 | solid-principles.md | 快速了解所有原则 |
| SRP | single-responsibility.md | 臃肿的 View/ViewModel、拆分文件 |
| OCP | open-closed.md | 添加提供程序、扩展性 |
| LSP | liskov-substitution.md | 协议约定、测试 |
| ISP | interface-segregation.md | 臃肿的协议、拆分协议 |
| DIP | dependency-inversion.md | 注入、测试、模拟 |
| 并发 | concurrency-patterns.md | Actors、@MainActor、Sendable |
| 反模式 | anti-patterns.md | 代码异味检测 |
模板
| 模板 | 使用场景 |
|---|---|
| view.md | 包含子视图和 #Preview 的 SwiftUI 视图 |
| viewmodel.md | 使用 @MainActor 的 @Observable ViewModel |
| service.md | API Service、Mock、Cache actor |
| protocol.md | Service protocol、CQRS、Auth |
| model.md | Model、DTO、Error、Enum |
禁止事项
| 反模式 | 修复方法 |
|---|---|
| 文件超过 100 行 | 在 90 行处分拆 |
| 在实现文件中定义 Protocol | 移至 Protocols/ 目录 |
ObservableObject | 使用 @Observable |
| Completion handler | 使用 async/await |
缺少 #Preview | 为每个 View 添加预览 |
| 在异步代码中使用非 Sendable 类型 | 使用带有 let 的 struct |
扁平的 Sources/ 结构 | 使用 Features/[Feature]/ |
评论
支持 Markdown