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
相关产品推荐
相关产品推荐

