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 条评论
还没有评论,来抢沙发~