SwiftUI:未找到Y类型的ObservableObject,其中Y是ObservableObject的子类
StackOverflow上经常出现这样的SwiftUI错误: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()时,这似
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
}