如何将测试数据添加到PreviewProvider

时间:2020-09-21 17:15:21

标签: ios swift mvvm swiftui

我是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
    }

}

1 个答案:

答案 0 :(得分:2)

您可以尝试以下操作:

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

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