我有一个名为@EnvironmentObject
的{{1}}(类型为word
),其Word
属性用于SwiftUI中NavigationLink的标签。对于链接到NavigationLink的DetailView,我只输入以下内容:
identifier
导致此DetailView的ContentView看起来像这样(我简化了实际代码以找出问题所在。)
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上的按钮时,我希望它使用新的struct ContentView: View {
@EnvironmentObject var word: Word
var body: some View {
NavigationView {
NavigationLink(destination: DetailView()) {
Text(word.identifier)
}
}
}
}
附加一个额外的“ a”来更新DetailView。但是,当我点击它时,它会带我回到ContentView,尽管它带有更新的word.identifier
。修改ContentView的NavigationLink使用的word.identifier
时,我似乎找不到保留在DetailView上的方法。另外,我正在运行Xcode 11.3.1,当前无法更新,因此,如果已对此进行了修补,请告诉我。
答案 0 :(得分:0)
这是解决方法
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
}
}
}
答案 1 :(得分:0)
假设Word类似于:
,此功能可以在iOS 13.4上正常运行。class Word : ObservableObject {
@Published var identifier = "foo"
}