为什么修改NavigationLink的标签会更改SwiftUI中显示的视图?

为什么修改NavigationLink的标签会更改SwiftUI中显示的视图?,swift,xcode,swiftui,xcode11,swiftui-navigationlink,Swift,Xcode,Swiftui,Xcode11,Swiftui Navigationlink,我有一个名为word(类型为word)的@EnvironmentObject,其标识符属性用于SwiftUI中导航链接的标签。对于链接到NavigationLink的DetailView,我只放了以下内容: struct DetailView: View { @EnvironmentObject var word: Word var body: some View { VStack { Text(word.identifier)

我有一个名为
word
(类型为
word
)的
@EnvironmentObject
,其
标识符
属性用于SwiftUI中导航链接的标签。对于链接到NavigationLink的DetailView,我只放了以下内容:

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")
            }
        }
    }
}
导致此DetailView的ContentView如下所示(我简化了实际代码以隔离问题)


当我点击DetailView上的按钮时,我希望它用一个新的
word.identifier
更新DetailView,该标识符附加了一个额外的“a”。但是,当我点击它时,它会将我带回ContentView,尽管它带有一个更新的
word.identifier
。当ContentView的NavigationLink所使用的
word.identifier
被修改时,我似乎找不到保持在DetailView上的方法。另外,我运行的是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类似于:

类字:ObservieObject{
@已发布的var identifier=“foo”
}
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
        }
    }
}