Files
FinDataHub/App
FinDataHub f17b3fb8dd refactor(ui): 按仓库约定拆分 NewsFlashService.swift(1054 → 821 行 + 3 个 extension 文件)(P2-19)
做法:遵循既有仓库约定「超大文件用 extension 拆到多个文件,不拆成独立类型」
(见项目记忆「Swift 代码组织」),按**关注点**拆出三个 extension 文件:

| 新文件 | 内容 | 行数 |
|---|---|---|
| `NewsFlashService+Probe.swift` | 免 spawn 进程探测(P0-3 节能):probeProcessStatus / parseStatusJSON | 67 |
| `NewsFlashService+Exec.swift` | 子进程执行(含 30 秒超时守护):runCommand / runDetachedProcess | 87 |
| `NewsFlashService+Fetch.swift` | 脚本路径解析 + 快讯拉取:findPython/findScript/compute*/fetchNews*/loadMoreNews | 113 |

只搬移代码,未改动任何逻辑。

必须同步做的两处可见性调整(Swift 的 `private` 是**文件作用域**)
----------------------------------------------------------------
1. 搬走的方法在新文件里要由 `private func` 放宽为 `func`(internal)。
   否则留在原文件的调用点报:
       error: 'runCommand' is inaccessible due to 'private' protection level
   (首次编译得到 30 条此类 error,逐条定位后修正。)
2. 主文件中 `private lazy var cachedPython` / `cachedScriptBase` 改为 `private(set) lazy var`:
   同模块 extension 需要读取,写保护不变。其初始化器调用的
   `computePythonPath` / `computeScriptBase` 随 +Fetch 搬走并放宽为 internal。

验证
----
`swift build -c release --disable-sandbox` → **Build complete!(0 error)**。
(注:本机完整重建较慢,首次用 900s 前台超时构建被中断、只留下
 `error: Build failed` 而无明细,误判为编译错误;改为后台构建 + 轮询后取到真实结果。)
2026-09-19 22:56:34 +08:00
..