在下面的代码中,我收到以下错误,但我不明白为什么。
未找到 Plotter 类型的 ObservableObject。一个 绘图仪的 View.environmentObject(_:) 作为祖先可能会丢失 这个观点。”
将
@StateObject
插入到父级 ContentView
中,添加到 DetailView
的环境中,并通过 @EnvironmentObject
本身中的 DetailView
拉出。
从我读到的所有内容来看,这应该是正确的方法。 我错过了什么?
import SwiftUI
class Plotter : ObservableObject
{
@Published var fileStem : String = "bobo"
}
struct ContentView : View
{
@StateObject var mPlotter = Plotter()
var body: some View
{
DetailView()
.environmentObject(mPlotter)
}
}
struct DetailView : View
{
@EnvironmentObject var mPlotter : Plotter
init()
{
let fs = mPlotter.fileStem + ".txt"
print("fileStem: \(fs)")
}
var body: some View
{
Text("This is text")
}
}
在
init
时,@EnvironmentObject
不可用,如您所见:
DetailView() //<- this will call the init() function
但是,
.environmentObject
是一个将在 AFTER DetailView 初始化后应用的函数。
所以,你可以尝试这种方法:直接在
mPlotter
中使用
Text
struct DetailView: View {
@EnvironmentObject var mPlotter: Plotter
var body: some View {
Text("This is \(mPlotter.fileStem).txt")
}
}