【发布时间】:2019-11-21 07:22:39
【问题描述】:
我正在尝试在 SwiftUI 中练习 @EnvironmentObject 工具。ContentView 中的共享对象 User init。
当我从 ContentView 切换到 NameView 时工作得很好。
但是,从 NameView 到 AgeView 失败了。 (请查看错误消息和代码会话)
错误信息
Fatal error: No ObservableObject of type User found.
有人可以给我建议吗?我错过了什么吗?谢谢
代码
init "User" type in contentView
NavigationView
+-----------+ +--------+ +-------+
|ContentView+--NavigationLink-->|NameView+--NavigationLink-->|AgeView|
+-----------+ +--------+ +-------+
final class User: ObservableObject {
@Published var name: String
@Published var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
struct ContentView: View {
var user: User = User(name: "SomeName", age: 44)
var body: some View {
NavigationView {
VStack {
Text("name: \(self.user.name) age: \(self.user.age)")
NavigationLink(destination: NameView().environmentObject(self.user)) {
Text("Show Name")
}
}
}
}
}
struct NameView: View {
@EnvironmentObject var user: User
var body: some View {
VStack {
Text("name: \(self.user.name)")
NavigationLink(destination: AgeView()) {
Text("Show Age")
}
}
}
}
struct AgeView: View {
@EnvironmentObject var user: User
var body: some View {
VStack {
Text("age: \(self.user.age)")
}
}
}
【问题讨论】:
-
ContentView中的EnvironmentObject已经传递给SceneDelegate中的ContentView后,不需要再次传递给NameView。 -
@MilenValchev 我知道并输入
SceneDelegate只是为了测试。 -
@CocoaUser 你能补充一点关于你面临的问题的信息吗?