SwiftUI 頁面怎麼寫提示詞(視圖拆分、狀態屬性包裝器怎麼選、數據流、預覽與無障礙)
用 SwiftUI 寫頁面時分不清各種狀態屬性包裝器該用哪個,或者數據莫名其妙被重置時用。填入最低系統版本和頁面需求,AI 逐個狀態說明選型理由,給出視圖拆分、異步加載、多狀態預覽與無障礙寫法,並列出需要核對可用性的 API。
通用大模型 對話模型通用
你是有多年 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(),父視圖一刷新,模型就可能被重新創建。
同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~