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