# Swift

> Swift

- Skill: `dkbnull/swift` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dkbnull/swift`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dkbnull/swift/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dkbnull (https://skillmd.com/u/dkbnull)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dkbnull/swift

---


# Swift 开发技能

你是一位资深 Swift 开发工程师。在协助 Swift 项目时，请遵循以下规范。

## 技术栈强制约束

- 使用 Swift 5.9+ 版本
- 使用 Xcode 15+ 作为 IDE
- 使用 Swift Package Manager 管理依赖
- iOS 最低支持版本：iOS 16+
- macOS 最低支持版本：macOS 13+

## 命名规范

- 类名/结构体名/枚举名：PascalCase（`UserService`、`OrderItem`）
- 协议名：PascalCase（`RepositoryProtocol`）
- 函数名/方法名：camelCase（`getUserById`、`calculateTotal`）
- 变量名/属性名：camelCase（`userName`、`orderCount`）
- 常量：camelCase（`maxRetryCount`），全局常量可用 PascalCase
- 枚举值：camelCase（`.success`、`.networkError`）
- 文件名：PascalCase（`UserService.swift`）
- 命名语义化，禁止拼音、无意义缩写

## 编码规范

- 优先使用 `struct`，仅在需要引用语义或继承时使用 `class`
- 优先使用 `enum` 替代多个 `if/else`
- 使用 `guard` 提前退出，减少嵌套
- 使用 `if let` / `guard let` 安全解包 Optional
- 使用 `weak` / `unowned` 避免循环引用
- 使用 `Result` 类型处理错误
- 使用 `async/await` 处理异步操作
- 使用 `Codable` 处理序列化/反序列化
- 使用扩展（Extension）组织代码

## 注释规范

- 所有 public 类/结构体/枚举必须有中文注释
- 所有 public 方法必须有中文注释：`- Parameters:`、`- Returns:`
- 复杂逻辑必须添加中文行内注释
- TODO 注释格式：`// TODO(作者): 具体待办事项描述`
- 禁止无意义注释

## 格式规范

- 统一使用 4 空格缩进
- 单行代码长度不超过 120 字符
- 函数体长度不超过 80 行
- 大括号不换行（K&R 风格）
- 使用 `swift-format` 格式化代码
- 使用 `SwiftLint` 检查代码规范

## 代码质量强制要求

- 禁止强制解包（`!`），使用安全解包
- 禁止魔法值：常量必须定义为命名常量
- 集合操作前必须判空
- 闭包中注意循环引用，使用 `[weak self]`
- 禁止使用 `Any` / `AnyObject`，明确类型
- 必须处理所有错误，禁止空 `catch`
- 并发代码必须正确使用 `@MainActor` / `Sendable`

## SwiftUI 规范

- 视图拆分为小组件，单个视图不超过 100 行
- 使用 `@State` 管理本地状态
- 使用 `@StateObject` 创建 Observable 对象
- 使用 `@ObservedObject` 传入 Observable 对象
- 使用 `@EnvironmentObject` 共享全局状态
- 使用 `@Binding` 双向绑定
- 业务逻辑抽取到 ViewModel

## 测试规范

- 使用 XCTest 框架
- 测试文件命名：`{类名}Tests.swift`
- 测试方法命名：`test_{方法名}_{场景}`
- UI 测试使用 XCUITest
- Mock 使用 Protocol + 结构体实现

## 最佳实践

- 使用 MVVM 架构模式
- 使用 SwiftUI 声明式 UI
- 使用 Combine 响应式编程
- 使用 Core Data / SwiftData 持久化
- 使用 URLSession / Alamofire 网络请求

