我創建了模型并使用該模型在多個地方修改變數資料,我可以在 FirstView 中成功修改和輸入資料。我可以修改 SecondView 中的資料。在 SecondView 中,無論我在文本欄位中輸入什么內容,它都會立即消失(簡而言之,不允許輸入資料并且 ofc 沒有顯示錯誤)
我想知道我是否每次都使用正確的物件變數來呼叫模型
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,但在這里也不起作用
uj5u.com熱心網友回復:
改變
@EnvironmentObject var mainViewModel = MainViewModel()
至
@EnvironmentObject var mainViewModel : MainViewModel
確保您在父視圖中注入
.environmentObject(mainViewModel)
uj5u.com熱心網友回復:
@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)
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529281.html
下一篇:更改下拉占位符文本
