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 条评论

登录 后参与评论

还没有评论,来抢沙发~