如何将测试数据添加到 PreviewProvider [英] How to add test data to PreviewProvider

查看:24
本文介绍了如何将测试数据添加到 PreviewProvider的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am new to iOS/Swift and to the MVVM architecture and was wondering how to send in test data to the SwiftUI Preview. (Actual data is received from the ViewModel from an API call)

我想添加的测试数据:

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())
    }
}

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

My View Model( I am sending both the Date & Actual Data to the View):

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
    }

}

推荐答案

您可以尝试以下操作:

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

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

Also, you may need to remove loadData() from init (in ViewModel), so your test data won't be overridden.

这篇关于如何将测试数据添加到 PreviewProvider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆