001project_wildgrowth/ios/WildGrowth/COMPLETION_Y2K版_审查报告.md

73 lines
4.2 KiB
Markdown
Raw Normal View History

2026-02-11 15:26:03 +08:00
# CompletionView Y2K 版 — 审查报告(不应用)
**审查日期**2025-01-29
**范围**Y2K 风格完结页设计稿与附带的 Swift 代码
**结论**:仅审查、不修改仓库;以下为兼容性与逻辑核对结果。
---
## 1. 接口与调用方兼容性
| 项目 | 当前仓库 | Y2K 提案 | 结论 |
|------|----------|----------|------|
| **CompletionView 初始化参数** | `courseId: String`, `courseTitle: String?`, `navigationPath: Binding<NavigationPath>?` | 与提案一致3 个参数,同名同类型) | ✅ 兼容 |
| **VerticalScreenPlayerView 调用** | `CompletionView(courseId:, courseTitle:, navigationPath:)` | 无需修改 | ✅ 可直接编译 |
| **GrowthView / 其他 navigationDestination** | 若存在 `.completion` 且传上述 3 参数 | 无需修改 | ✅ 无影响 |
替换为 Y2K 版后,仅需整文件替换 `CompletionView.swift`**无需改任何调用处**。
---
## 2. 数据与依赖一致性
| 项目 | 当前实现 | Y2K 提案 | 结论 |
|------|----------|----------|------|
| **UserManager** | `UserManager.shared``studyStats.(time, lessons)` | 相同 | ✅ |
| **导航** | `navStore.switchToGrowthTab()` + `navigationPath?.wrappedValue = NavigationPath()``dismiss()` | 与提案一致 | ✅ |
| **持久化 key** | `has_revealed_course_\(courseId)` | `has_y2k_booted_\(courseId)` | ⚠️ 见下 |
- **持久化 key 不同**:若从当前「赛博拍立得」版直接切到 Y2K 版用户在本课程下会视为「未启动过」Y2K需再按一次 SYNC 才会显示结果。若希望换肤后「已显影过的课程仍为已显影」,可把 Y2K 的 `storageKey` 改为与现版一致(例如继续用 `has_revealed_course_\(courseId)`),否则保留 `has_y2k_booted_\(courseId)` 亦可,属产品选择。
---
## 3. 逻辑差异(游客与加载)
| 项目 | 当前实现 | Y2K 提案 | 建议 |
|------|----------|----------|------|
| **游客 (isGuest)** | 点击后不调 API直接显影并写持久化 | 仍执行 `Task.sleep` + `fetchUserProfile()`catch 后置 `isSystemOn = true` | 建议在 Y2K 的 `startUpload()` 内保留与现版一致的游客分支:若 `userManager.isGuest` 则直接设 `isSystemOn = true` 并写持久化,不调 `fetchUserProfile`,避免无谓请求与约 1.2s 延迟。 |
| **登录用户** | 拉取 `fetchUserProfile` 后显影 | 同1.2s 后拉取 + 显影) | ✅ 行为一致 |
若严格遵循「只换皮肤、逻辑不变」,建议在 Y2K 版中补上与现版相同的 `isGuest` 短路逻辑。
---
## 4. UI / 实现细节核对
- **Y2K 外壳与屏幕**:半透明渐变 + `strokeBorder` 高光 + `.ultraThinMaterial`、LCD 开/关色、果冻按钮与 SYNC DATA/进度态,均为纯视觉,无逻辑影响。
- **Y2KIdleView / Y2KResultView**:使用 `userManager.studyStats.lessons` / `time` 与当前数据源一致;字体与 XP 风格进度条仅为样式。
- **ForEach(0..<n)**提案中 `ForEach(0..<3)`、`ForEach(0..<5)`、`ForEach(0..<80)` 等以 `Range<Int>` 配合 `id: \.self` SwiftUI 中合法无需改
- **屏幕内布局**:内屏 `overlay` 中再 `.padding(12)` 会形成双层内边距;若希望与现版内边距一致,可后续微调数值,非阻塞。
---
## 5. 影响范围(仅换 CompletionView 时)
- **仅替换** `Views/CompletionView.swift` 为 Y2K 版时:
- **VerticalScreenPlayerView**:无需改动。
- **MapView / MainTabView / GrowthView / ProfileView / DiscoveryView**:无改动、无影响。
- 若采纳「持久化 key 统一」或「游客短路」建议,仅需在 Y2K 版单文件内修改,不涉及其他页面。
---
## 6. 总结
| 维度 | 结论 |
|------|------|
| **接口兼容** | ✅ 三参数一致,调用方无需修改 |
| **数据与导航** | ✅ 与现版一致 |
| **持久化 key** | ⚠️ 与现版不同,换肤后需再按一次 SYNC可按需统一 key |
| **游客逻辑** | ⚠️ 建议在 Y2K 版中保留与现版相同的 isGuest 短路,实现「只换皮肤」 |
| **其他页面** | ✅ 无影响 |
**审查结论**Y2K 版可作为「仅换皮肤」的替换方案;建议在应用前(若采纳)补上游客短路逻辑,并按产品需求决定是否统一持久化 key。**本次未对仓库做任何修改。**