我是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
}
}
答案 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中),以便不会覆盖您的测试数据。