Я хотел бы обновить элемент пользовательского интерфейса в обзорном виде при изменении данных в другом виде.
Я посмотрел в @EnvironmentalObject и @Binding. Тем не менее, обновление любого из этих объектов не приводит к перезагрузке представления. Изменяется только при рендеринге @State force.
Кроме того, в случае, описанном ниже, ChangeView не является дочерним элементом OverviewView. Поэтому @Binding в любом случае не является опцией.
Data.swift
struct ExampleData : Hashable {
var id: UUID
var name: String
}
var globalVar: ExampleData = ExampleData(id: UUID(), name:"")
OverviewView.swift
struct OverviewView: View {
@State private var data: ExampleData = globalVar
var body: some View {
Text(data.name)
}
}
ChangeView.swift
struct ChangeView: View {
@State private var data: ExampleData = globalVar
var body: some View {
TextField("Name", text: $data.name, onEditingChanged: { _ in
globalVar = data }, onCommit: { globalVar = data })
}
}
Изменения внутри ChangeView TextField обновят globalVar. Однако это не приведет к обновлению текста в OverviewView при переключении обратно на представление.
Я знаю, что использование глобальных переменных - это "уродливое" кодирование. Как мне обрабатывать данные, которые будут использоваться во множестве несвязанных представлений?
Посоветуйте, пожалуйста, как лучше справиться с такой ситуацией.