审查 Combine 框架代码,检测内存泄漏、运算符误用和错误处理。适用于包含 import Combine、AnyPublisher、@Published 等的代码审查。
组合代码回顾 QQ快速引用是一项面向实际任务的技能,主要用于引文、 主题、 AnyPublishers. md. map, 平面映射, 组合 Latest, switch ToLatest. 参考/操作者. md.;Any Cancellabl。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
| 问题类型 | 参考文档 |
|---|---|
| Publishers、Subjects、AnyPublisher | references/publishers.md |
| map、flatMap、combineLatest、switchToLatest | references/operators.md |
| AnyCancellable、循环引用、[weak self] | references/memory.md |
| tryMap、catch、replaceError、Never | references/error-handling.md |
sink 闭包在 self 拥有 cancellable 时均使用 [weak self]assign(to:on:self)(应改用 assign(to: &$property) 或 sink)eraseToAnyPublisher() 暴露为 AnyPublisherflatMap(当需 map + switchToLatest 时不应使用 flatMap)flatMap 内部进行错误处理,以保持主链持续运行tryMap 后接 mapError,以恢复错误类型receive(on: DispatchQueue.main)请按顺序完成。前一条件未通过时,不得跳过执行后续条件。
AnyPublisher、@Published、PassthroughSubject)。若无任何适用项,则终止审查并标注“超出范围”。sink、assign 和 store(in:) 调用,明确说明其对应的 AnyCancellable 存储位置(属性、Set、任务生命周期内),或标记为 临时性(ephemeral) 并附一行简要理由(例如:同步一次性调用,其生命周期不可能超过调用方)。若仅凭代码片段无法判断,请标注 未知(unknown) 并请求提供上下文中的存储结构,切勿假设安全。[weak self]、[unowned self] 或非捕获模式。receive(on: DispatchQueue.main)、@MainActor 或等效机制;否则,须以 file:line 格式标记缺失调度的问题点。file:line(或精确粘贴的源码行)并指明其违反的是哪一条 审查清单 条目;低严重性备注可省略行号,但仍须确保能根据所命名的文件复现问题。sink 或 assign 是否可能与 self 构成循环引用?flatMap 是否应替换为 switchToLatest?mapError 正确映射?相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.5万人学习
最新文章