Я пытаюсь выяснить, как использовать значение, присвоенное переменной в классе ObservableObject, в другом представлении на другом листе. Я вижу, что он обновляется, но когда я обращаюсь к нему в новом представлении на новом листе, он сбрасывается до инициализированного значения. Как получить его, чтобы сохранить новое значение, чтобы я мог использовать его в новом представлении на новом листе?
ContentData.swift
import SwiftUI
import Combine
class ContentData: ObservableObject {
@Published var text: String = "Yes"
}
ContentView.swift
import SwiftUI
struct ContentView: View {
@ObservedObject var contentData = ContentData()
@State private var inputText: String = ""
@State private var showNewView: Bool = false
var body: some View {
VStack {
TextField("Text", text: $inputText, onCommit: {
self.assignText()
})
Button(action: {
self.showNewView = true
}) {
Text("Go To New View")
}
.sheet(isPresented: $showNewView) {
NewView(contentData: ContentData())
}
}
}
func assignText() {
print(contentData.text)
contentData.text = inputText
print(contentData.text)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(contentData: ContentData())
}
}
NewView.swift
import SwiftUI
struct NewView: View {
@ObservedObject var contentData = ContentData()
var body: some View {
VStack {
Text(contentData.text)
}
}
}
struct NewView_Previews: PreviewProvider {
static var previews: some View {
NewView(contentData: ContentData())
}
}
Я пробовал много, много разных методов, которые я видел из других примеров. Я попытался сделать это с @EnviromentObject, но не смог заставить это работать. Я также попробовал другую версию NewView.swift, где я инициализировал значение с помощью:
init(contentData: ContentData) {
self.contentData = contentData
self._newText = State<String>(initialValue: contentData.text)
}
Я думаю, что я близок, но я не вижу, что мне не хватает. Любая помощь будет очень высоко ценится. Спасибо.