为什么修改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
}
}
}