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 優先的方式重構,而不是引入不必要的檢視模型。

最適合

  • 龐大的 SwiftUI 檔案,其中 `body` 將版面配置、分支、非同步工作和內嵌動作全都混在單一難以審查的畫面中
  • 既有的 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 小時

    最適合

    • 龐大的 SwiftUI 檔案,其中 `body` 將版面配置、分支、非同步工作和內嵌動作全都混在單一難以審查的畫面中
    • 既有的 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 的所有權:請使用 `@State` 儲存根層級的 `@Observable` 模型(在 iOS 17+ 上);除非 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 的所有權:請使用 `@State` 儲存根層級的 `@Observable` 模型(在 iOS 17+ 上);除非 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 擷取區段檢視,再引入新的抽象層。更精簡明確的檢視樹,往往能讓新增檢視模型變得完全沒有必要。

    為每個子檢視提供盡可能精簡的介面

    應優先傳入 let 值、@Binding 和用途單一的回呼,而非把完整的父層模型交給每個子檢視。如此一來,每個擷取出的區段都更容易預覽,也較不容易意外重新與整個畫面耦合。

    要求 Codex 明確指出刻意未做的變更

    進行安全重構時,讓 Codex 明確列出未變更的項目會很有幫助:業務規則、導覽行為、持久化、分析資料語意,以及使用者可見的版面配置。如此可大幅加快審查速度。

    Tech stack

    Need

    UI 架構

    Default options

    SwiftUI,採用 MV 優先的拆分方式,搭配 @State@Environment 和精簡的專用 View 型別

    Why it's needed

    大型畫面通常應先由 Codex 簡化檢視樹和狀態流,再引入另一層檢視模型,後續維護會更容易。

    Need

    重構工作流程

    Why it's needed

    此外掛程式的 SwiftUI 檢視重構技能為 Codex 提供明確規則,以便在保留行為的同時擷取子檢視、改善 Observation 的使用方式,並清理副作用。

    Need

    驗證

    Default options

    xcodebuild、預覽和針對性的 UI 檢查

    Why it's needed

    每次擷取後進行小規模建置或模擬器檢查,比起一次性重寫,更能讓人確信重構保留了原有行為。

    Need Default options Why it's needed
    UI 架構 SwiftUI,採用 MV 優先的拆分方式,搭配 @State @Environment 和精簡的專用 View 型別 大型畫面通常應先由 Codex 簡化檢視樹和狀態流,再引入另一層檢視模型,後續維護會更容易。
    重構工作流程 Build iOS Apps 外掛程式 此外掛程式的 SwiftUI 檢視重構技能為 Codex 提供明確規則,以便在保留行為的同時擷取子檢視、改善 Observation 的使用方式,並清理副作用。
    驗證 xcodebuild 、預覽和針對性的 UI 檢查 每次擷取後進行小規模建置或模擬器檢查,比起一次性重寫,更能讓人確信重構保留了原有行為。

    相關使用案例