未找到 T 类型的 ObservableObject

问题描述 投票:0回答:1

在下面的代码中,我收到以下错误,但我不明白为什么。

未找到 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")
    }
}
swift macos swiftui
1个回答
0
投票

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")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.