SuperAPI AI 工具集

guide-swiftui-view-refactor

编程与开发

查看项目

更新于 10-16 03:48

技能介绍

用途:这是一个专家工作流/模式指南(非 API 参考文档),用于重构和审查 SwiftUI 视图文件,目标是把视图拆成小型、明确、稳定的视图类型。原始出处为 Dimillian/Skills(作者 Thomas Ricouard),MIT 许可。

主要能力与原则:

  1. 视图成员排序:按 Environment、private/public let、@State 等存储属性、非视图 computed var、init、body、视图构建器、helper/async 函数的自上而下顺序组织,除非已有文件存在需保留的更强本地约定。
  2. 默认采用 MV 而非 MVVM:视图应是轻量状态表达与编排点;优先使用 @State、@Environment、@Query、.task、.task(id:)、onChange,再考虑视图模型;服务与共享模型通过 @Environment 注入,领域逻辑放在 services/models。不要仅为镜像本地状态或包装环境依赖而引入视图模型;界面变大时应先拆分子视图。
  3. 优先使用专用子视图类型而非 computed some View 辅助属性:对超过约一屏或含多个逻辑分区的 body 进行标记,为非平凡分区提取专用 View 类型并传入小而明确的输入(数据、绑定、回调),而非整个父状态。同时把非平凡按钮动作和副作用移出 body,body 应像 UI 而非视图控制器。
  4. 保持稳定视图树:避免 body 或 computed 视图用 if/else 返回完全不同的根分支,改为单一稳定基础视图,把条件放进局部 section 或修饰符(overlay、opacity、disabled、toolbar 等),以减少身份抖动和额外重算。
  5. 视图模型处理:仅在已存在或明确要求时使用;若存在则尽量非可选,通过 init 传入依赖并在视图 init 中创建,避免 bootstrapIfNeeded 等延迟初始化模式。
  6. Observation 用法:iOS 17+ 的 @Observable 引用类型在拥有视图中以 @State 存储并显式向下传递;若部署目标含 iOS 16 或更早,在拥有者用 @StateObject、注入旧式可观察模型时用 @ObservedObject。

使用方式(工作流):重排视图成员顺序;移除 body 内联动作与副作用,把业务逻辑移入 services/models;通过提取专用子视图缩短过长 body;确保稳定结构、避免顶层 if 分支切换;若已有或明确需要视图模型,替换为在 init 初始化的非可选 @State 视图模型;确认 Observation 用法;除非被要求,否则保持布局与业务逻辑不变。视图文件超过约 300 行时应积极拆分,用 // MARK: - 注释的 private extension 组织动作与辅助方法,但扩展不能替代把巨型界面拆成更小视图类型;被复用或独立有意义的子视图应移入单独文件。参考资料见 references/mv-patterns.md。

限制:资料未提供具体安装命令、价格或平台支持范围等信息。