如何使用包含数据和不同 view/view 模型的环境对象在 Swift 中实现 MVVM?

How is possible implementing MVVM in Swift with an environment object containing the data and differents view/view models?

我正在尝试实现我的应用程序架构,在应用程序结构中加载一个对象,该对象包含要通过环境对象在应用程序的所有视图中共享的数据:

@main
struct SMT_testingApp: App {
    
    @StateObject private var dataManager = DataManager()
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(dataManager)
        }
    }
}

这是发布包含数据的 var 的数据管理器 class:

class DataManager: ObservableObject {
    
    @Published var SMTItemList: [SMTItem] = [SMTItem(id: UUID(), itemDesc: "", itemCreaDate: Date(), itemUpdDate: Date(), itemTags: [], linkedItemsUID: [])]
    
    var urlFile: URL {
        getDocumentsDirectory().appendingPathComponent("/SMT.json")
    }
    
    init() { loadData() }
    
    func getDocumentsDirectory() -> URL {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        return paths[0]
    }
    
    func loadData() {
//...

在此之后包含他的视图模型实例的视图:

struct ContentView: View {
    @StateObject private var viewModel = ViewModel()
    
    var body: some View {
        List(viewModel.dataManager.SMTItemList) { item in
            SMTItemView(item: item)
               }
    }
}

struct SMTItemView: View {
    var item : SMTItem
    var body: some View {
        Text("Item desc: \(item.itemDesc)")
    }
    
}

最后,包含环境对象和数据的视图模型。

extension ContentView {
    class ViewModel: ObservableObject{
        @EnvironmentObject var dataManager: DataManager
    }
}

现在,代码构建正确,但在运行时我在内容视图中收到此错误:

我做错了什么?以这种方式实现架构是否正确(一个环境对象包含数据和许多 views/view 模型)? 谢谢

@EnvironmentObject 必须在视图范围内,而不是视图模型 class。喜欢

struct ContentView: View {
    @StateObject private var viewModel = ViewModel()
    @EnvironmentObject var dataManager: DataManager    // << here !!

    var body: some View {
        List(dataManager.SMTItemList) { item in
            SMTItemView(item: item)
               }
    }
}