65 lines
3.1 KiB
Markdown
65 lines
3.1 KiB
Markdown
# CompletionView Y2K 版 — 最终候选版 (FRC) 审查报告(不应用)
|
||
|
||
**审查日期**:2025-01-29
|
||
**范围**:Y2K Final Release Candidate(含持久化 Key 回滚 + 游客短路逻辑补全)
|
||
**结论**:仅审查、不修改仓库;两项修复已正确落实,可视为可发布候选。
|
||
|
||
---
|
||
|
||
## 1. 持久化 Key 回滚 ✅
|
||
|
||
| 项目 | 要求 | FRC 实现 | 结论 |
|
||
|------|------|----------|------|
|
||
| **storageKey** | 与现版一致,沿用 `has_revealed_course_\(courseId)` | `private var storageKey: String { "has_revealed_course_\(courseId)" }` | ✅ 正确 |
|
||
|
||
从拍立得版本升级到 Y2K 后,已显影过的课程会直接显示结果,无需再次点击 SYNC。
|
||
|
||
---
|
||
|
||
## 2. 游客短路逻辑 ✅
|
||
|
||
| 项目 | 要求 | FRC 实现 | 结论 |
|
||
|------|------|----------|------|
|
||
| **是否调网络** | 游客不调 `fetchUserProfile` | `if userManager.isGuest { ... return }` 先判断,仅主线程延迟后 `finalizeSync()` | ✅ 不调接口 |
|
||
| **视觉延迟** | 极短“假连接”(你要求 0.5s) | `DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) { finalizeSync() }`(0.6s) | ✅ 实现合理;若需严格 0.5s 可将 `0.6` 改为 `0.5` |
|
||
| **结果与持久化** | 直接成功并写 Key | `finalizeSync()` 内 `isSystemOn = true`、`UserDefaults.set(true, forKey: storageKey)`、触觉反馈 | ✅ 一致 |
|
||
|
||
游客路径:点击 → `isBooting = true` → 0.6s 后主线程执行 `finalizeSync()` → 显影 + 写 Key + 成功反馈,无任何网络请求。
|
||
|
||
---
|
||
|
||
## 3. 登录用户路径 ✅
|
||
|
||
- `Task.sleep(1.2s)` → `fetchUserProfile()`(catch 忽略)→ `MainActor.run { finalizeSync() }`。
|
||
- 与现版“拉取后显影”一致,无变更。
|
||
|
||
---
|
||
|
||
## 4. 结构与线程安全 ✅
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| **finalizeSync()** | 集中处理显影 + 写 Key + `isBooting = false` + 触觉,避免重复;仅从主线程/主队列调用(`DispatchQueue.main.asyncAfter` 与 `MainActor.run`),对 `@State` 的更新安全。 |
|
||
| **SpeakerGrill(rotation:)** | 抽取为 `private func SpeakerGrill(rotation: Double) -> some View`,在 body 中调用合法,无问题。 |
|
||
|
||
---
|
||
|
||
## 5. 可选小修正(非必须)
|
||
|
||
- **延迟时长**:需求写“0.5s 假连接”,代码为 0.6s;若需严格一致,可将 `deadline: .now() + 0.6` 改为 `0.5`。
|
||
- **ForEach**:若当前 Swift/SwiftUI 版本对 `ForEach(0..<n)` 报错或告警,可为 `ForEach(0..<3, id: \.self)`、`ForEach(0..<5, id: \.self)`、`ForEach(0..<80, id: \.self)` 补上 `id: \.self`。
|
||
|
||
---
|
||
|
||
## 6. 总结
|
||
|
||
| 维度 | 结论 |
|
||
|------|------|
|
||
| **持久化 Key** | ✅ 已回滚为 `has_revealed_course_\(courseId)`,与现版兼容 |
|
||
| **游客短路** | ✅ 已补全:不调网络、短延迟后直接 `finalizeSync()` |
|
||
| **登录用户** | ✅ 行为与现版一致 |
|
||
| **接口与调用方** | ✅ 三参数不变,仅替换 `CompletionView.swift` 即可 |
|
||
| **其他页面** | ✅ 无影响 |
|
||
|
||
**审查结论**:FRC 已正确落实“Key 回滚”与“游客短路”两项建议,逻辑与现版对齐,可作为最终发布候选。**本次未对仓库做任何修改。**
|