English
主导航
Codex

Codex 用例

重构 SwiftUI 界面

使用 Codex 将过大的 SwiftUI 页面拆分为小型子视图,且不改变其行为或布局。

难度 高级
时间周期 1h

使用 Codex 和 Build iOS Apps 插件将冗长的 SwiftUI 视图拆分为专门的局部视图,将副作用移出 body, 稳定 state 和 Observation 的使用,并保持重构以 MV 为优先,而不是引入不必要的视图模型。

适用场景

  • 庞大的 SwiftUI 文件中,`body` 将布局、分支判断、异步工作和内联操作混杂在一个难以审查的页面里
  • 现有的 iOS 功能,在外观和行为应保持不变的同时,内部实现应变得更易于维护
  • 包含计算型 `some View` 片段、可选视图模型或状态管道的页面,应简化为明确的子视图输入和回调

目录

    ← 所有用例

    重构 SwiftUI 界面

    使用 Codex 将过大的 SwiftUI 页面拆分为小型子视图,且不改变其行为或布局。

    使用 Codex 和 Build iOS Apps 插件将冗长的 SwiftUI 视图拆分为专门的局部视图,将副作用移出 body, 稳定 state 和 Observation 的使用,并保持重构以 MV 为优先,而不是引入不必要的视图模型。

    高级
    1h

    使用 Codex 和 Build iOS Apps 插件将冗长的 SwiftUI 视图拆分为专门的局部视图,将副作用移出 body, 稳定 state 和 Observation 的使用,并保持重构以 MV 为优先,而不是引入不必要的视图模型。

    高级
    1h

    适用场景

    • 庞大的 SwiftUI 文件中,`body` 将布局、分支判断、异步工作和内联操作混杂在一个难以审查的页面里
    • 现有的 iOS 功能,在外观和行为应保持不变的同时,内部实现应变得更易于维护
    • 包含计算型 `some View` 片段、可选视图模型或状态管道的页面,应简化为明确的子视图输入和回调

    技能与插件

    • 使用 SwiftUI 视图重构技能来提取专门的子视图,保持稳定的数据流,简化 Observation 的使用,并在 Codex 编辑大型 SwiftUI 页面时保持行为完整无损。
    技能 为什么使用它
    构建 iOS 应用 使用 SwiftUI 视图重构技能来提取专门的子视图,保持稳定的数据流,简化 Observation 的使用,并在 Codex 编辑大型 SwiftUI 页面时保持行为完整无损。

    起始提示词

    使用 Build iOS Apps 插件及其 SwiftUI 视图重构技能来清理 [NameOfScreen.swift],且不改变页面的功能或外观。约束条件:- 保留行为、布局、导航和业务逻辑,除非发现必须单独指出的 bug。- 默认采用 MV,而非 MVVM。优先使用 `@State`、`@Environment`、`@Query`、`.task`、`.task(id:)` 和 `onChange`,然后再考虑引入新的视图模型,并且仅在该功能明确需要时才保留视图模型。- 重新组织视图顺序,使存储属性、计算状态、`init`、`body`、视图辅助方法和常规辅助方法从上到下便于浏览。- 将有意义的部分提取为具有小型显式输入、`@Binding` 和回调的专门 `View` 类型。不要用一个庞大的计算型 `some View` 属性堆砌来代替巨型 `body`。- 将非平凡的按钮操作和副作用从 `body` 移至小型方法中,并将实际的业务逻辑移入服务或模型中。- 保持根视图树稳定。避免在顶层使用 `if/else` 分支来完全切换不同的页面,如果局部条件分支或修饰符就足够的话。- 在重构时修复 Observation 所有权:在 iOS 17+ 上,根 `@Observable` 模型使用 `@State`,并避免使用可选或延迟初始化的视图模型,除非 UI 确实需要这种状态形式。- 每次提取后,运行最小但有效的构建或测试检查,以证明页面行为仍然一致。交付内容:- 重构后的页面及所有提取出的子视图- 关于新子视图边界和数据流的简要说明- 您有意保留视图模型的任何地方及其原因- 您为证明行为未变而运行的验证检查
    使用 Build iOS Apps 插件及其 SwiftUI 视图重构技能来清理 [NameOfScreen.swift],且不改变页面的功能或外观。约束条件:- 保留行为、布局、导航和业务逻辑,除非发现必须单独指出的 bug。- 默认采用 MV,而非 MVVM。优先使用 `@State`、`@Environment`、`@Query`、`.task`、`.task(id:)` 和 `onChange`,然后再考虑引入新的视图模型,并且仅在该功能明确需要时才保留视图模型。- 重新组织视图顺序,使存储属性、计算状态、`init`、`body`、视图辅助方法和常规辅助方法从上到下便于浏览。- 将有意义的部分提取为具有小型显式输入、`@Binding` 和回调的专门 `View` 类型。不要用一个庞大的计算型 `some View` 属性堆砌来代替巨型 `body`。- 将非平凡的按钮操作和副作用从 `body` 移至小型方法中,并将实际的业务逻辑移入服务或模型中。- 保持根视图树稳定。避免在顶层使用 `if/else` 分支来完全切换不同的页面,如果局部条件分支或修饰符就足够的话。- 在重构时修复 Observation 所有权:在 iOS 17+ 上,根 `@Observable` 模型使用 `@State`,并避免使用可选或延迟初始化的视图模型,除非 UI 确实需要这种状态形式。- 每次提取后,运行最小但有效的构建或测试检查,以证明页面行为仍然一致。交付内容:- 重构后的页面及所有提取出的子视图- 关于新子视图边界和数据流的简要说明- 您有意保留视图模型的任何地方及其原因- 您为证明行为未变而运行的验证检查

    重构单个页面且不改变其功能

    此用例适用于 SwiftUI 文件已膨胀为巨型页面,且每次微小的编辑都让人感到风险的时候。目标不是重新设计功能或发明新架构。要求 Codex 保留行为和布局,然后将页面拆分为具有显式数据流的小型子视图,从而使后续修改变得更容易审查。

    使用 Build iOS Apps 插件 这类清理工作。它的 SwiftUI 视图重构技能在实用性上具有鲜明的观点:默认采用 MV 而非 MVVM,将业务逻辑保留在服务或模型中,优先使用局部视图状态和环境依赖,并且仅在该功能明确需要时才保留视图模型。

    要求 Codex 做什么

    首先指定一个具体的页面文件,并要求 Codex 在改进结构的同时保留原有行为。以下是值得直接放入提示词中的重构规则:

    • 重新组织文件顺序,使环境依赖、存储属性、非视图的计算状态、 init, body, 视图辅助函数和辅助方法很容易从上到下进行扫描。
    • 将有意义的部分提取为专门的 View 类型,并带有小型显式输入、 @Bindings 和回调。
    • 保持计算型 some View 辅助方法少而精。不要将一个巨型页面重构成一长串私有的计算型视图片段。
    • 将非平凡的按钮操作和副作用移出 body, 并将真正的业务逻辑移入服务或模型中。
    • 保持根视图树稳定。优先在局部或修饰符中使用局部条件判断,而不是使用在顶层 if/else 分支来整体替换页面。
    • 随时修复 Observation 所有权。对于 iOS 17+ 上根 @Observable 模型,拥有它们的视图应将其存储在 @State;仅当你的部署目标要求时才使用旧版可观察包装器。

    要求小型验证循环

    保持行为的重构应附带证明。要求 Codex 在每次有意义的提取之后,运行能够覆盖该页面的最小构建、预览、测试或模拟器检查,然后总结结构上发生了哪些变化,以及哪些是有意保持不变的。

    实用技巧

    先拆分,再讨论架构

    如果页面过大,请要求 Codex 在引入新的抽象层之前先提取局部视图。更短、更明确的视图树通常能完全消除添加视图模型的压力。

    将尽可能小的接口传递给每个子视图

    在适合工作流的地方,优先选择 let 值、 @Bindings 以及单一用途的回调,而不是将整个父模型交给每个子视图。这使得提取出的每个部分更易于预览,并且更难意外地与整个页面重新耦合。

    要求 Codex 指出有意未更改的部分

    对于安全的重构,当 Codex 明确列出其未更改的内容时会有很大帮助:业务规则、导航行为、持久化、分析语义以及用户可见的布局。这能让审查变得快得多。

    技术栈

    需求

    UI 架构

    默认选项

    SwiftUI 采用跨 @State, @Environment,以及小型的专用功能 View 类型的 MV 优先拆分

    为何需要它

    大型页面通常在引入另一个视图模型层之前,通过 Codex 简化视图树和状态流会变得更易于维护。

    需求

    重构工作流

    为何需要它

    该插件的 SwiftUI 视图重构技能为 Codex 提供了关于提取、Observation 和副作用清理的明确规则,同时保留了原有行为。

    需求

    验证

    默认选项

    xcodebuild、预览和专门的 UI 检查

    为何需要它

    每次提取后进行小型构建或模拟器检查,使人们更容易信任这种保持行为的重构,而不是一次性重写。

    需求 默认选项 为何需要它
    UI 架构 SwiftUI 采用跨 @State , @Environment ,以及小型的专用功能 View 类型的 MV 优先拆分 大型页面通常在引入另一个视图模型层之前,通过 Codex 简化视图树和状态流会变得更易于维护。
    重构工作流 Build iOS Apps 插件 该插件的 SwiftUI 视图重构技能为 Codex 提供了关于提取、Observation 和副作用清理的明确规则,同时保留了原有行为。
    验证 xcodebuild 、预览和专门的 UI 检查 每次提取后进行小型构建或模拟器检查,使人们更容易信任这种保持行为的重构,而不是一次性重写。

    相关用例