DataStorage.swift
class DataStorage: ObservableObject {
@Published var cartArray = [Order]()
}
ViewModel.swift
class ViewModel : ObservableObject{
var dataStorage = DataStorage()
@Published var bookOptionsArray = [BookOption]()
func addBook (bookId:String ,bookName : String){
dataStorage.cartArray.append(Order(bookId:bookId, bookName: bookName, bookoptions:self.bookOptionsArray))
}
View1:
struct View1: View {
@ObservedObject var vwModel = ViewModel()
@EnvironmentObject var datastrg: DataStorage
ListView(vwModel:vwModel)
}
struct ListView: View{
@ObservedObject var vwModel = ViewModel()
@EnvironmentObject var dt: DataStorage
List(vwModel.bookoptions.bookList) {opn in
//Display List
//If a book a selected it will add to bookOptionsArray of viewModel. Call addBook() in ViewModel class
}
}
View3
struct View3: View {
@EnvironmentObject var dt : DataStorage
List(dt.cartArray){item in
//Display the selected books to place order
}
View3 顯示空串列,因為cartArray 沒有正確存盤 如何在View3 中顯示串列?任何想法/建議都會有所幫助
uj5u.com熱心網友回復:
您沒有在任何地方呼叫您的函式 addBook,在呼叫該函式的 view3 中添加一個 onappear,您的串列將填充資料。
uj5u.com熱心網友回復:
您正在視圖模型中創建一個本地 DataStorage,而不是使用 @EnvironmentObject 中的一個,因此將其注入到視圖模型中。
首先更改視圖模型,因此您必須注入 DataStorage
class ViewModel: ObservableObject {
var dataStorage: DataStorage
//...
init(dataStorage: DataStorage) {
self.dataStorage = dataStorage
}
//...
}
然后進行更改,View1以便在其中創建視圖模型onAppear
struct View1: View {
@ObservedObject var vwModel: ViewModel
@EnvironmentObject var datastrg: DataStorage
var body: some View {
//...
}
.onAppear {
vwModel = ViewModel(dataStorage: datastrg)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/326311.html
