Swiftui表单在多个地方重复使用不起作用



我已经创建了模型,使用该模型我可以在多个地方修改变量数据,并在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)
}
}
}