是否可以在 ObservableObject 中使用 @EnvironmentObject?
它给了我一个错误:
Fatal error: No ObservableObject of type EntryViewModel found. A View.environmentObject(_:) for EntryViewModel may be missing as an ancestor of this view.: file SwiftUI, line 0
Run Code Online (Sandbox Code Playgroud)
我知道 @EnvironmentObject 很好,因为我在其他地方使用它。
如果没有,我怎样才能得到这些信息?
class ResultsViewModel: ObservableObject {
@EnvironmentObject var entry: EntryViewModel
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
是否可以在 ObservableObject 中使用 @EnvironmentObject?
不它不是。@EnvironmentObject只能在View中使用。
如果没有,我怎样才能得到这些信息?
一个可能的解决方案是将其传入init
:
class ResultsViewModel: ObservableObject {
var entry: EntryViewModel
init(entry: EntryViewModel) {
self.entry = entry
}
}
Run Code Online (Sandbox Code Playgroud)
您需要使用DynamicProperty
它的update
功能,例如
class MyObject: ObservableObject {
var context: NSManagedObjectContext?
}
struct MyProperty: DynamicProperty {
@Environment(\.managedObjectContext) private var viewContext
@StateObject var object = MyObject()
// update is called before body in the View containing this property
func update() {
// environment vars now are valid
if object.context != viewContext {
// do something
object.context = viewContext
}
}
}
struct MyView {
var myProperty = MyProperty()
var body: some View {
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4476 次 |
最近记录: |