SuperAPI AI 工具集

swiftui-view-refactor

编程与开发

查看项目

更新于 10-15 23:34

技能介绍

该技能用于重构和审查 SwiftUI 视图文件,目标是让视图保持轻量、显式与稳定。默认采用原生 SwiftUI:本地状态放在视图内,共享依赖放入 environment,业务逻辑放入 services/models,仅当请求或现有代码明确要求时才使用视图模型。

主要规则:

  1. 视图内部顺序:environment、let 属性、@State 等存储属性、非视图计算属性、init、body、计算视图构建器、辅助与异步函数。
  2. 默认 MV 而非 MVVM:优先使用 @State、@Environment、@Query、.task、.task(id:)、onChange;避免仅为了镜像本地状态或包装环境依赖而新建视图模型。
  3. 优先专用子视图类型,而非计算 some View 辅助属性;body 超过约一屏或含多个逻辑区块时应拆分。向子视图传入小而明确的输入(数据、绑定、回调),而非整个父状态。
  4. 把动作与副作用移出 body;不在 body 中内联复杂按钮动作,不把业务逻辑埋进 .task、.onAppear、.onChange、.refreshable,body 应像 UI 而非视图控制器。
  5. 保持稳定视图树,避免顶层 if/else 切换完全不同的根分支;条件应放入局部区块或修饰符(overlay、opacity、disabled、toolbar 等)。
  6. 仅当已存在视图模型或明确要求时才处理:尽量非可选,在 init 中创建,避免 bootstrapIfNeeded 等延迟初始化。
  7. iOS 17+ 的 @Observable 引用类型在持有视图中存为 @State;部署目标含 iOS 16 或更早时,持有方用 @StateObject,注入旧式可观察模型用 @ObservedObject。

工作流程:按顺序重排视图;从 body 移除内联动作与副作用,把业务逻辑移入 services/models,视图只保留轻量编排;抽取专用子视图类型缩短长 body;确保结构稳定,避免顶层分支切换;如存在或明确需要视图模型,用非可选 @State 并在 init 初始化;确认 Observation 用法;除非被要求,否则不改变布局或业务逻辑。

限制与说明:不改变布局或业务逻辑(除非明确要求);计算视图构建器置于 body 下方,非视图计算属性置于 init 上方;当视图文件超过约 300 行时应积极拆分,把有意义的区块抽为专用 View 类型,可用带 // MARK: - 注释的私有扩展放置动作与辅助函数,但扩展不能替代拆分巨型界面;抽取的子视图若被复用或可独立表达,应移到单独文件。更多 MV 优先的说明见 references/mv-patterns.md。具体安装命令与平台要求资料中暂未提供。