For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主导航
Codex

Codex use case

重构 SwiftUI 屏幕

使用 Codex 将过大的 SwiftUI 屏幕拆分为小型子视图,同时不改变行为或布局。

Difficulty 高级
Time horizon 1 小时

使用 Codex 和 Build iOS Apps 插件,将冗长的 SwiftUI 视图拆分为专用区段视图,把副作用移出 body,使状态管理和 Observation 的使用更稳定,并坚持 MV 优先,而不是引入不必要的视图模型。

最适合

  • `body` 在单个难以审查的屏幕中混杂布局、分支、异步任务和内联操作的巨型 SwiftUI 文件
  • 需要在内部实现变得更易维护的同时保持视觉和行为完全一致的现有 iOS 功能
  • 包含计算型 `some View` 片段、可选视图模型或状态传递逻辑的屏幕,需要将其简化为明确的子视图输入和回调

Contents

    ← 全部使用场景

    重构 SwiftUI 屏幕

    使用 Codex 将过大的 SwiftUI 屏幕拆分为小型子视图,同时不改变行为或布局。

    使用 Codex 和 Build iOS Apps 插件,将冗长的 SwiftUI 视图拆分为专用区段视图,把副作用移出 body,使状态管理和 Observation 的使用更稳定,并坚持 MV 优先,而不是引入不必要的视图模型。

    高级
    1 小时

    使用 Codex 和 Build iOS Apps 插件,将冗长的 SwiftUI 视图拆分为专用区段视图,把副作用移出 body,使状态管理和 Observation 的使用更稳定,并坚持 MV 优先,而不是引入不必要的视图模型。

    高级
    1 小时

    最适合

    • `body` 在单个难以审查的屏幕中混杂布局、分支、异步任务和内联操作的巨型 SwiftUI 文件
    • 需要在内部实现变得更易维护的同时保持视觉和行为完全一致的现有 iOS 功能
    • 包含计算型 `some View` 片段、可选视图模型或状态传递逻辑的屏幕,需要将其简化为明确的子视图输入和回调

    技能与插件

    • 使用 SwiftUI 视图重构技能提取专用子视图、保持数据流稳定、简化 Observation 的使用,并在 Codex 编辑大型 SwiftUI 屏幕时确保行为不变。
    Skill Why use it
    Build iOS Apps 使用 SwiftUI 视图重构技能提取专用子视图、保持数据流稳定、简化 Observation 的使用,并在 Codex 编辑大型 SwiftUI 屏幕时确保行为不变。

    入门提示

    使用 Build iOS Apps 插件及其 SwiftUI 视图重构技能清理 [NameOfScreen.swift],但不要改变屏幕的功能或外观。 约束: - 除非发现必须单独指出的缺陷,否则保持行为、布局、导航和业务逻辑不变。 - 默认采用 MV,而非 MVVM。在引入新的视图模型之前,优先使用 `@State`、`@Environment`、`@Query`、`.task`、`.task(id:)` 和 `onChange`;仅当此功能确实需要视图模型时,才保留视图模型。 - 调整视图内容的顺序,使存储属性、计算状态、`init`、`body`、视图辅助项和辅助方法从上到下清晰易查。 - 将有明确职责的区段提取为专用 `View` 类型,并使用少量且明确的输入、`@Binding` 和回调。不要把一个巨大的 `body` 替换为一堆大型计算型 `some View` 属性。 - 将有实质逻辑的按钮操作和副作用移出 `body`,并将真正的业务逻辑移入服务或模型。 - 保持根视图树稳定。当通过局部条件区段或修饰符即可实现时,避免使用会切换到完全不同屏幕的顶层 `if/else` 分支。 - 在重构过程中修正 Observation 的所有权:在 iOS 17+ 上,使用 `@State` 存储根级 `@Observable` 模型;除非 UI 确实需要这种状态结构,否则避免使用可选或延迟初始化的视图模型。 - 每完成一次提取后,都运行范围最小但有用的构建或测试检查,以证明屏幕行为仍然相同。 交付内容: - 重构后的屏幕及提取出的所有子视图 - 简要说明新的子视图边界和数据流 - 有意保留视图模型的位置及原因 - 为证明行为保持不变而运行的验证检查
    使用 Build iOS Apps 插件及其 SwiftUI 视图重构技能清理 [NameOfScreen.swift],但不要改变屏幕的功能或外观。 约束: - 除非发现必须单独指出的缺陷,否则保持行为、布局、导航和业务逻辑不变。 - 默认采用 MV,而非 MVVM。在引入新的视图模型之前,优先使用 `@State`、`@Environment`、`@Query`、`.task`、`.task(id:)` 和 `onChange`;仅当此功能确实需要视图模型时,才保留视图模型。 - 调整视图内容的顺序,使存储属性、计算状态、`init`、`body`、视图辅助项和辅助方法从上到下清晰易查。 - 将有明确职责的区段提取为专用 `View` 类型,并使用少量且明确的输入、`@Binding` 和回调。不要把一个巨大的 `body` 替换为一堆大型计算型 `some View` 属性。 - 将有实质逻辑的按钮操作和副作用移出 `body`,并将真正的业务逻辑移入服务或模型。 - 保持根视图树稳定。当通过局部条件区段或修饰符即可实现时,避免使用会切换到完全不同屏幕的顶层 `if/else` 分支。 - 在重构过程中修正 Observation 的所有权:在 iOS 17+ 上,使用 `@State` 存储根级 `@Observable` 模型;除非 UI 确实需要这种状态结构,否则避免使用可选或延迟初始化的视图模型。 - 每完成一次提取后,都运行范围最小但有用的构建或测试检查,以证明屏幕行为仍然相同。 交付内容: - 重构后的屏幕及提取出的所有子视图 - 简要说明新的子视图边界和数据流 - 有意保留视图模型的位置及原因 - 为证明行为保持不变而运行的验证检查

    重构单个屏幕,同时保持其功能不变

    当 SwiftUI 文件膨胀为一个巨型屏幕、每次小改动都让人觉得有风险时,就适合使用此用例。目标不是重新设计功能或发明新架构。请让 Codex 保持行为和布局不变,再将屏幕拆分为数据流明确的小型子视图,以便更轻松地审查下一次更改。

    对于这类清理工作,请使用 Build iOS Apps 插件。其 SwiftUI 视图重构技能提供了实用且立场明确的指导:默认选择 MV 而非 MVVM,将业务逻辑保留在服务或模型中,优先使用本地视图状态和环境依赖项,并且仅当功能确实需要视图模型时才保留它。

    应让 Codex 做什么

    首先指定一个具体的屏幕文件,并要求 Codex 在改进结构时保持行为不变。以下重构规则值得直接写入您的提示:

    • 重新排列文件内容,使环境依赖项、存储属性、计算型非视图状态、initbody、视图辅助项和辅助方法便于从上到下浏览。
    • 将有明确职责的区段提取为专用 View 类型,并使用少量且明确的输入、@Binding 和回调。
    • 计算型 some View 辅助项应少用且简短。不要将一个巨型屏幕重构为一长串私有的计算型视图片段。
    • 将有实质逻辑的按钮操作和副作用移出 body,并将真正的业务逻辑移入服务或模型。
    • 保持根视图树稳定。应优先在区段或修饰符中使用局部条件逻辑,而不是使用会切换整个屏幕的顶层 if/else 分支。
    • 在此过程中修正 Observation 的所有权。对于 iOS 17+ 上的根级 @Observable 模型,拥有这些模型的视图应将其存储在 @State 中;只有部署目标要求时,才使用旧式可观察对象包装器。

    让 Codex 执行小范围验证循环

    保持行为不变的重构应有验证依据。每完成一次有意义的提取,都让 Codex 执行能覆盖该屏幕且范围最小的构建、预览、测试或模拟器检查,然后总结结构上做了哪些更改,以及哪些内容有意保持不变。

    实用技巧

    先拆分,再讨论架构

    如果屏幕过于庞大,请先让 Codex 提取区段视图,再引入新的抽象层。更短、更明确的视图树通常足以消除添加视图模型的必要。

    为每个子视图提供尽可能精简的接口

    与其把完整的父级模型交给每个子视图,不如优先传入 let 值、@Binding 和单一用途的回调。这样,每个提取出的区段都更易预览,也不易意外地再次与整个屏幕耦合。

    让 Codex 明确指出哪些内容有意保持不变

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

    Tech stack

    Need

    UI 架构

    Default options

    采用 MV 优先拆分方式的 SwiftUI,在 @State@Environment 和小型专用 View 类型之间划分职责

    Why it's needed

    在引入另一层视图模型之前,先让 Codex 简化视图树和状态流,通常能让大型屏幕更易维护。

    Need

    重构工作流

    Default options

    Build iOS Apps 插件

    Why it's needed

    该插件的 SwiftUI 视图重构技能为 Codex 提供了清晰的规则,用于提取视图、处理 Observation 以及清理副作用,同时保持行为不变。

    Need

    验证

    Default options

    xcodebuild、预览和针对性 UI 检查

    Why it's needed

    每次提取后执行小规模的构建或模拟器检查,比一次性重写更容易让人确信重构保持了原有行为。

    Need Default options Why it's needed
    UI 架构 采用 MV 优先拆分方式的 SwiftUI,在 @State @Environment 和小型专用 View 类型之间划分职责 在引入另一层视图模型之前,先让 Codex 简化视图树和状态流,通常能让大型屏幕更易维护。
    重构工作流 Build iOS Apps 插件 该插件的 SwiftUI 视图重构技能为 Codex 提供了清晰的规则,用于提取视图、处理 Observation 以及清理副作用,同时保持行为不变。
    验证 xcodebuild 、预览和针对性 UI 检查 每次提取后执行小规模的构建或模拟器检查,比一次性重写更容易让人确信重构保持了原有行为。

    相关使用场景