SwiftUI:在使用MVVM时,当我试图将EnvironmentObject传递给另一个视图时,我会迷路

SwiftUI:在使用MVVM时,当我试图将EnvironmentObject传递给另一个视图时,我会迷路,swiftui,environment-variables,Swiftui,Environment Variables,我已经完成并阅读了我能找到的关于这种行为的所有帖子: No ObservableObject of type BaseViewModel found. A View.environmentObject(_:) for BaseViewModel may be missing as an ancestor of this view 然而,我仍然无法完成它。我认为我在ContentView中使用“@EnvironmentObject var vm:BaseViewModel”的方式是错误的。但是当

我已经完成并阅读了我能找到的关于这种行为的所有帖子:

No ObservableObject of type BaseViewModel found. A View.environmentObject(_:) for BaseViewModel may be missing as an ancestor of this view
然而,我仍然无法完成它。我认为我在ContentView中使用“@EnvironmentObject var vm:BaseViewModel”的方式是错误的。但是当我尝试“@EnvironmentObject var vm=BaseViewModel()”时,BaseViewModel()将请求付款人,因此它将是BaseViewModel(付款人:)。 这是我的密码

struct Payer: Identifiable {
    var id = UUID().uuidString
    var name : String

    var offset : CGFloat = 0
}
在我的ViewModel文件中

class BaseViewModel: ObservableObject {
    
//* The problem * //
    @Published var payer: Payer 
//* The problem * //
    
    @Published var payers = [
        Payer( name: "AA"),
        Payer( name: "BB"),
        Payer( name: "CC"),
    ]
    
    init(payer: Payer) {
        self.payer = payer
    }
}
最后,在我看来

struct ContentView: View {
    @EnvironmentObject var vm : BaseViewModel
        var body: some View {
            BaseView()
                .environmentObject(self.vm)
        }
    }

您需要将其插入到创建
ContentView
的位置,如

@main
struct YourApp: App {

    var body: some Scene {
        WindowGroup {
            ContentView()
              .environmentObject(BaseViewModel(player: Payer( name: "AA"))
        }
    }
}

struct ContentView:View{
@EnvironmentObject变量vm:BaseViewModel
var body:一些观点{
BaseView()

//.environmentObject(self.vm)您必须从应用程序的根(即主根结构)注入数据模型

import SwiftUI

struct Payer: Identifiable {
    var id = UUID().uuidString
    var name : String = "ABCD"
    
    var offset : CGFloat = 0
}

class BaseViewModel: ObservableObject {
    
    //* The problem * //
    @Published var payer: Payer
    //* The problem * //
    
    @Published var payers = [
        Payer( name: "AA"),
        Payer( name: "BaB"),
        Payer( name: "CC"),
    ]
    
    init(payer: Payer) {
        
        self.payer = payer
    }
}

struct ContentView: View {
    @EnvironmentObject var vm : BaseViewModel
    var body: some View {
        Text(vm.payer.name)
    }
}
@Main-:

import SwiftUI

@main
struct WaveViewApp: App {
    
    @StateObject var dataController:BaseViewModel
   
    init() {
        let payer = Payer()
        let model = BaseViewModel(payer:payer)
        _dataController = StateObject(wrappedValue: model)
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView().environmentObject(dataController)
        }
    }
}
import SwiftUI

struct Payer: Identifiable {
    var id = UUID().uuidString
    var name : String = "ABCD"
    
    var offset : CGFloat = 0
}

class BaseViewModel: ObservableObject {
    
    //* The problem * //
    @Published var payer: Payer
    //* The problem * //
    
    @Published var payers = [
        Payer( name: "AA"),
        Payer( name: "BaB"),
        Payer( name: "CC"),
    ]
    
    init(payer: Payer) {
        
        self.payer = payer
    }
}

struct ContentView: View {
    @EnvironmentObject var vm : BaseViewModel
    var body: some View {
        Text(vm.payer.name)
    }
}
import SwiftUI

@main
struct WaveViewApp: App {
    
    @StateObject var dataController:BaseViewModel
   
    init() {
        let payer = Payer()
        let model = BaseViewModel(payer:payer)
        _dataController = StateObject(wrappedValue: model)
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView().environmentObject(dataController)
        }
    }
}