SwiftUI:未找到Y类型的ObservableObject,其中Y是ObservableObject的子类

SwiftUI:未找到Y类型的ObservableObject,其中Y是ObservableObject的子类,swiftui,observableobject,Swiftui,Observableobject,StackOverflow上经常出现这样的SwiftUI错误: Thread 1: Fatal error: No ObservableObject of type Foo found. A View.environmentObject(_:) for Foo may be missing as an ancestor of this view. 答案总是将Foo实例传递给视图的environmentObject()函数。但是,将Foo的子类传递给environmentObject()时,这似

StackOverflow上经常出现这样的SwiftUI错误:

Thread 1: Fatal error: No ObservableObject of type Foo found. A View.environmentObject(_:) for Foo may be missing as an ancestor of this view.
答案总是将
Foo
实例传递给视图的
environmentObject()
函数。但是,将
Foo
的子类传递给
environmentObject()
时,这似乎不起作用

福斯威夫特 斯威夫特酒吧 斯威夫特 有没有办法使用
observateObject
子类作为环境对象?

这里有一个解决方案(使用Xcode 12.1/iOS 14.1进行测试)EnvironmentObject通过显式类型匹配注入

var body: some View {
    BrokenView().environmentObject(Bar() as Foo)   // OK
    WorkingView().environmentObject(Bar())  // OK
}

那太麻烦了,但我要了!为什么会这样?
class Bar: Foo {
    override func doSomething() { ... }
}
struct BrokenView: View {
    @EnvironmentObject var foo: Foo

    var body: some View { ... }
}

struct WorkingView: View {
    @EnvironmentObject var foo: Bar

    var body: some View { ... }
}

struct ParentView: View {
    var body: some View {
        BrokenView().environmentObject(Bar())   // No ObservableObject of type Foo found...
        WorkingView().environmentObject(Bar())  // OK
    }
}
var body: some View {
    BrokenView().environmentObject(Bar() as Foo)   // OK
    WorkingView().environmentObject(Bar())  // OK
}