⚠️ AI Agent 强制执行指令 (Mandatory Pre-requisite): 在读取、修改或编写任何 Swift / SwiftUI 代码之前,必须首先读取并理解以下两个核心基础设施文件:
AppConstants.swift(掌握全局常量、主题颜色、存储 Key、表单选项与分类元数据)UIComponents.swift(掌握项目已抽象的原子化 UI 组件及其 Mode 变体)严禁在未读取上述两个文件的情况下直接生成、修改或重构视图代码!
- 硬编码零容忍与全局常量集 (
AppConstants.swift) - 命名一致性规范 (消除“一物多名”)
- 原子化 UI 组件复用规范 (
UIComponents.swift) - 严格并发安全 (Strict Concurrency & Sendable)
- AI Agent 代码提交前自查清单 (Checklist)
原则:禁止在视图 (View) 或业务逻辑 (Engine/ViewModel) 中直接硬编码任何文字、颜色、尺寸、AppStorage 键名或表单预设。
- 存储键名:必须使用
AppConstants.StorageKeys.*。 - 主题与颜色:必须使用
AppConstants.Colors.*或AppConstants.Appearance.defaultTintHex。 - 预设数组与选项:表单时长、星期选择、图标列表必须从
AppConstants.TaskForm.*或AppConstants.Appearance.*引用。
❌ 反面示例 (BAD):
// 严禁在 View 中直接硬编码
@AppStorage("user_custom_color_presets") private var raw = ""
let bg = Color(red: 0.96, green: 0.96, blue: 0.97)
let defaultHex = "EE8C8C"✅ 正面示例 (GOOD):
@AppStorage(AppConstants.StorageKeys.customColorPresets) private var raw = ""
let bg = AppConstants.Colors.backgroundGrey
let defaultHex = AppConstants.Appearance.defaultTintHex原则:贯穿“模型层
| 业务概念 | 模型层 (Model/Engine) | 视图状态/计算属性 (View) | 事件回调/动作 (Action) | 禁用别名 (Forbidden) |
|---|---|---|---|---|
| 任务完成状态 | InstanceStatus == .done |
isDone: Bool |
onToggle: () -> Void |
isCompleted, completed, statusBool |
| 排期与时间汇总 | defaultPlacement / placement |
placementSummary: String |
- | placementText, headerSummaryText |
| 外观主题色 | tintHex: String |
tintHex: String |
- | color, hexString, themeColor |
| 图标名称 | iconSymbol: String |
iconSymbol: String |
- | icon, symbolName, imageName |
❌ 反面示例 (BAD):
// 同一项目中不同的 Row 视图给勾选状态取不同的名字
@State private var isCompleted = false // ❌
let completedStatus: Bool // ❌
let placementText: String // ❌✅ 正面示例 (GOOD):
@State private var isDone = false // ✅ 全局统一
let isDone: Bool // ✅
private var placementSummary: String // ✅ 统一描述排期文本原则:当某个 UI 结构的逻辑或几何形状在多处出现时,严禁手写重复代码,必须抽离为 UIComponents.swift 中的原子组件,并支持必要的变体模式 (Mode/Variant)。
- 规则:凡是涉及任务完成/未完成状态切换的按钮,必须统一调用
TaskStatusCheckbox。 - 变体支持:
.standard:用于白色/浅色背景(彩色边框,选中后彩色填充 + 白色勾)。.inverted:用于彩色 Header 背景(白色边框,选中后白色填充 + 主题色勾)。
// ✅ 统一使用原子组件
TaskStatusCheckbox(
isDone: item.instance?.status == .done,
tintColor: Color(hex: item.task.tintHex),
mode: .standard,
onToggle: onToggle
)原则:全代码库需符合 Swift 6 严格并发检查标准。
- 静态全局常量:
AppConstants中包含的结构体/数组必须符合Sendable协议。 - 外部不可变模型桥接:对于引用了外部模型的结构体(如包装了
Weekday枚举的WeekdayOption),显式标注@unchecked Sendable以确保编译零 Error/Warning。 - UI 线程隔离:所有 SwiftUI View 及其子组件自动运行在
@MainActor隔离域。
在生成或修改任何 Swift 代码后,AI Agent 必须按照以下清单进行逐项自查:
- [前置文件读取] 是否在编码前已读取
AppConstants.swift和UIComponents.swift? - [硬编码检查] 视图代码中是否存在
Color(red:green:blue:)或"EE8C8C"等硬编码值?(必须迁移至AppConstants) - [组件复用检查] 是否在视图中手写了可复用组件
- [命名一致性检查] 避免一物多名