SwiftUI 頁面怎麼寫提示詞(視圖拆分、狀態屬性包裝器怎麼選、數據流、預覽與無障礙)

用 SwiftUI 寫頁面時分不清各種狀態屬性包裝器該用哪個,或者數據莫名其妙被重置時用。填入最低系統版本和頁面需求,AI 逐個狀態說明選型理由,給出視圖拆分、異步加載、多狀態預覽與無障礙寫法,並列出需要核對可用性的 API。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是有多年 SwiftUI 經驗的 iOS 工程師。請幫我實現下面這個頁面,並在每個狀態屬性旁邊說明「為什麼用這個屬性包裝器」。

最低支持的系統版本:[最低系統版本]
Xcode 與 Swift 版本:[Xcode 與 Swift 版本]
頁面需求:[頁面需求描述]
數據來源:[數據來源]
現有代碼(可選):[現有代碼]

一、先回答三個問題來決定每個狀態怎麼聲明,用表格列出(狀態 | 誰創建並擁有 | 值類型還是引用類型 | 選用的屬性包裝器 | 理由):
- 這個狀態是視圖自己私有的簡單值嗎?
- 子視圖是隻讀它,還是要改它?
- 它是不是需要跨多個視圖共享的模型對象?是本視圖創建的,還是外面傳進來的?
特別檢查一種常見錯誤:模型對象由視圖自己創建,卻聲明成「只觀察、不持有」的方式,導致父視圖刷新時對象被重新創建、數據丟失。

二、如果我的最低系統版本支持較新的 Observation 觀察機制,給出新舊兩種寫法並說明區別;是否可用請標「需核對官方文檔」,不要替我假定。

三、視圖拆分與數據流:body 過長時拆成子視圖,子視圖只接收它需要的字段;數據向下傳,事件通過閉包或綁定向上載;列表項要有穩定的唯一標識,不用數組下標。

四、異步加載:加載、成功、空、失敗四種介面;說明任務在視圖消失時如何取消。

五、預覽:給出多組預覽(有數據、空、出錯、深色模式、特大字號)。

六、無障礙:只有圖標的按鈕加可讀標籤;文字用系統文本樣式以支持動態字體,不寫死字號;提醒顏色對比與點按區域。

七、API 可用性表:列出代碼中可能受系統版本限制的 API,每個標註「最低系統版本需核對官方文檔」;若低於我的最低版本,給出 if #available 的回退寫法。

高亮處換成你自己的內容:[最低系統版本]、[Xcode 與 Swift 版本]、[頁面需求描述]、[數據來源]、[現有代碼]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[最低系統版本] 是最重要的一項,例如「iOS 15」,它決定了哪些新 API 不能直接用;不填的話 AI 給出的代碼可能在你的目標裝置上編譯不過。[頁面需求描述] 寫清頁面上有什麼、能做什麼操作。[現有代碼] 遇到「數據被重置」「介面不刷新」這類問題時一定要貼,問題通常就出在屬性包裝器的選擇上。

常見問題與調整:

  • 返回上一頁再進來數據沒了 → 追問:「檢查我的代碼裏每個模型對象是誰創建、誰持有,指出聲明方式不對的地方。」
  • 某個 API 報「僅在更高版本可用」→ 追問:「這個 API 在我的最低版本下不可用,請給出等效的回退寫法。」
  • 預覽崩潰 → 追問:「給預覽單獨準備一份假數據和假模型,不依賴網絡和真實存儲。」

示例輸出

示例,僅供參考(訂單列表頁,使用 ObservableObject 體系的寫法,節選)
狀態誰創建並擁有屬性包裝器理由
搜尋關鍵字本視圖@State視圖私有的簡單值
訂單列表模型本視圖@StateObject引用類型,由本視圖創建並持有,視圖刷新時不會重建
行內「已收藏」開關父視圖@Binding子視圖要修改父視圖的值
swift
struct OrderListView: View {
    @StateObject private var model = OrderListModel()
    @State private var keyword = ""

    var body: some View {
        List(model.orders) { order in       // Order 遵循 Identifiable
            OrderRow(order: order)
        }
        .searchable(text: $keyword)
        .task { await model.load() }        // 視圖消失時任務會被取消
    }
}

可用性:searchable、task 的最低系統版本需核對官方文檔。如果這裏把模型寫成 @ObservedObject var model = OrderListModel(),父視圖一刷新,模型就可能被重新創建。

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~