我已经创建了模型,使用该模型我可以在多个地方修改变量数据,并在FirstView中成功地修改和输入数据。我可以在SecondView中修改数据。在SecondView中,无论我在文本字段中键入什么内容,它都会立即消失(简而言之,不允许输入数据,并且没有显示错误(
我想知道我是否每次都使用合适的对象变量来调用模型
class MainViewModel: ObservableObject {
@Published var name = ""
@Published var age = ""
}
// Using at one place
struct FirstView : View {
@StateObject var mainViewModel = MainViewModel()
var body: some View {
Form {
TextField("", text: self.$MainViewModel.name)
TextField("", text: self.$MainViewModel.age)
}
}
}
// ReUsing same at another place
struct SecondView : View {
@EnvironmentObject var mainViewModel = MainViewModel()
var body: some View {
Form {
TextField("", text: self.$MainViewModel.name)
TextField("", text: self.$MainViewModel.age)
}
}
}
我试过在两个视图中都使用@EnvironmentObject,但在中都不起作用
更改
@EnvironmentObject var mainViewModel = MainViewModel()
至
@EnvironmentObject var mainViewModel : MainViewModel
确保在父视图中注入
.environmentObject(mainViewModel)
@lorem ipsum完美地解释了这个问题。我只是将他的评论转换为工作代码。请看一下。这将使您更清楚地了解有关从父母处注射的问题。
import SwiftUI
@main
struct StackOverflowApp: App {
@State private var searchText = ""
var body: some Scene {
WindowGroup {
NavigationView {
FirstView()
.environmentObject(MainViewModel())
}
}
}
}
import SwiftUI
class MainViewModel: ObservableObject {
@Published var name = ""
@Published var age = ""
}
// Using at one place
struct FirstView : View {
@EnvironmentObject var mainViewModel : MainViewModel
var body: some View {
VStack {
Form {
TextField("", text: $mainViewModel.name)
TextField("", text: $mainViewModel.age)
}
NavigationLink {
SecondView()
.environmentObject(mainViewModel)
// Either you can inject new or same object from child to parent. @lorem ipsum
// .environmentObject(MainViewModel())
} label: {
Text("Second View")
}
}
}
}
// ReUsing same at another place
struct SecondView : View {
@EnvironmentObject var mainViewModel : MainViewModel
var body: some View {
Form {
TextField("", text: $mainViewModel.name)
TextField("", text: $mainViewModel.age)
}
}
}