You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI PreviewProvider中如何传递ObservableObject示例数据?

给ReservationRecapView的预览传递带示例数据的ObservableObject实例

要在PreviewProvider中为ReservationRecapView传递包含指定示例数据的ReservationInfo实例,有两种简单可行的方式:

方法一:给ReservationInfo添加自定义初始化器

给ReservationInfo类添加带参数的初始化方法,创建实例时可直接传入所有示例值,代码更简洁:

class ReservationInfo: ObservableObject {
    @Published var customerName: String = ""
    @Published var surname : String = ""
    @Published var nPeople : Int = 1
    @Published var date = Date()
    
    // 自定义初始化器,用于传入示例数据
    init(customerName: String, surname: String, nPeople: Int, date: Date) {
        self.customerName = customerName
        self.surname = surname
        self.nPeople = nPeople
        self.date = date
    }
    
    // 保留默认初始化器,不影响现有代码逻辑
    init() {}
}

随后在ReservationRecapView的预览中,用该初始化器创建带示例数据的实例:

struct ReservationRecapView_Previews: PreviewProvider {
    static var previews: some View {
        // 生成指定的示例日期(以2024年6月15日18:30为例)
        let sampleDate = Calendar.current.date(from: DateComponents(year: 2024, month: 6, day: 15, hour: 18, minute: 30)) ?? Date()
        
        let sampleReservation = ReservationInfo(
            customerName: "Mario",
            surname: "Rossi",
            nPeople: 4,
            date: sampleDate
        )
        
        ReservationRecapView(myReservationInfo: sampleReservation)
    }
}

方法二:直接修改默认实例的属性

如果不想修改ReservationInfo原类,可先创建默认实例,再手动覆盖属性值:

struct ReservationRecapView_Previews: PreviewProvider {
    static var previews: some View {
        let sampleReservation = ReservationInfo()
        // 设置示例数据
        sampleReservation.customerName = "Luigi"
        sampleReservation.surname = "Verdi"
        sampleReservation.nPeople = 2
        sampleReservation.date = Calendar.current.date(from: DateComponents(year: 2024, month: 7, day: 20, hour: 20, minute: 0)) ?? Date()
        
        ReservationRecapView(myReservationInfo: sampleReservation)
    }
}

注意事项

  • 将预览结构体名称改为ReservationRecapView_Previews(替换原代码中的ContentView_Previews),避免和其他视图预览重名,符合SwiftUI命名规范。
  • 使用Calendar.current.date(from:)可精准生成指定日期时间,避免依赖默认当前时间,让预览数据更稳定。

内容的提问来源于stack exchange,提问作者Berardino Chiarello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:15:40