【问题标题】:How to add test data to PreviewProvider如何将测试数据添加到 PreviewProvider
【发布时间】:2021-01-07 19:56:13
【问题描述】:

我是 iOS/Swift 和 MVVM 架构的新手,想知道如何将 测试数据 发送到 SwiftUI 预览版。 (实际数据通过 API 调用从 ViewModel 接收)

我要添加的测试数据:

test data = [(name: "Test1", price: "18.00-21.00"), (name: "Test2", price: "8.00-11.00"), (name: "Test3", price: "10.00")]

我的观点:

struct TodayView: View {

    @ObservedObject var viewModel: ViewModel
    
    var body: some View {
        NavigationView {
            
            List(viewModel.results, id: \.self) { item in

                Text(item.name)
                    .font(.subheadline)
                Text(item.price ?? "NIL")
                    .font(.headline)

            }
            .listStyle(InsetGroupedListStyle())
            .navigationBarTitle(Text("\(viewModel.titleDate)"))

        }
    }
}
    
struct TodayView_Previews: PreviewProvider {
    
    static var previews: some View {
        // Add Test Data here? How to pass it into TodayView?
        TodayView(viewModel: ViewModel())
    }
}

我的视图模型(我将日期和实际数据都发送到视图):

class ViewModel: ObservableObject {
    
    // Title Date
    @Published var titleDate: String = ""
    
    let dateLong = Date()
    
    func createDate() -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = "E, MMM d"
        return formatter.string(from: Date())
    }
    
    init(){
        self.results = [Model.Calendar]()
        titleDate = self.createDate()
        loadData()
    }


    func loadData() {

       // API Call

    }
    
    // Actual Data received from API call
    @Published var results: [Model.Calendar]

    
}

我的模特:

struct Model {
    
    struct Calendar: Codable, Hashable {
        var name: String
        var price: String
    }

}

【问题讨论】:

    标签: ios swift mvvm swiftui


    【解决方案1】:

    您可以尝试以下方法:

    struct TodayView_Previews: PreviewProvider {
        static var previews: some View {
            let viewModel = ViewModel()
            viewModel.results = <your_test_data>
            return TodayView(viewModel: viewModel)
        }
    }
    

    此外,您可能需要从 init 中删除 loadData()(在 ViewModel 中),这样您的测试数据就不会被覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 2012-06-03
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多