我将事情简化为这个非常简单的示例(一个普通的 SwiftUI 项目,仅编辑 ContentView 和 SceneDelegate 中的一行)。设置一个微不足道的 ObservableObject 和几个屏幕视图。使用最新的 Xcode 11.4 和模拟器很容易崩溃。
import SwiftUI
// NB In SceneDelegate added: let contentView = ContentView().environmentObject(EO())
class EO: ObservableObject {
@Published var n = 2
}
struct ContentView: View {
@EnvironmentObject var eo: EO
var body: some View {
NavigationView {
VStack {
Text("A: \(eo.n)")
NavigationLink(destination: ContentViewB()) {
Text("Go to B")
}
}
}
}
}
struct ContentViewB: View {
@EnvironmentObject var eo: EO
var body: some View {
VStack {
Text("B: \(eo.n)")
}.onAppear {
self.eo.n += 1
}
}
}
难道我做错了什么?或者这是一个 SwiftUI 错误?它最初似乎工作正常,然后重新导航到子视图时它崩溃了。虽然确切的行为是不确定的(可能会在第二次或第三次导航时崩溃!)