为什么修改导航链接的标签会更改 SwiftUI 中显示的视图?



我有一个名为word(类型Word(的@EnvironmentObject,我将其identifier属性用于SwiftUI中导航链接的标签。对于链接到导航链接的详细视图,我所做的只是:

struct DetailView: View {
@EnvironmentObject var word: Word
var body: some View {
VStack {
Text(word.identifier)
Button(action: {
self.word.identifier += "a"
}) {
Text("Click to add an 'a' to Word's identifier")
}
}
}
}

导致此详细信息视图的内容视图如下所示(我简化了实际代码以隔离问题(。

struct ContentView: View {
@EnvironmentObject var word: Word
var body: some View {
NavigationView {
NavigationLink(destination: DetailView()) {
Text(word.identifier)
}
}
}
}

当我点击详细信息视图上的按钮时,我希望它使用附加一个附加了额外"a"的新word.identifier更新详细信息视图。但是,当我点击它时,它会将我带回 ContentView,尽管word.identifier更新了。当修改 ContentView 的导航链接所使用的word.identifier时,我似乎找不到一种方法来留在我的详细信息视图上。另外,我正在运行Xcode 11.3.1,目前无法更新,因此,如果已修补,请告诉我。

这是解决方法

struct DetailView: View {
@EnvironmentObject var word: Word
@State private var identifier: String = ""
var body: some View {
VStack {
Text(self.identifier)
Button(action: {
self.identifier += "a"
}) {
Text("Click to add an 'a' to Word's identifier")
}
}
.onAppear {
self.identifier = self.word.identifier
}
.onDisappear {
self.word.identifier = self.identifier
}
}
}

这在iOS 13.4上按预期工作,假设Word如下所示:

class Word : ObservableObject {
@Published var identifier = "foo"
}

最新更新