Код: Выделить всё
struct ContentView: View {
@State var data: [Int: String] = [
1: "One",
2: "Two",
3: "Three",
4: "Four"
]
var body: some View {
NavigationStack {
List {
ForEach(Array(data.keys).sorted(), id: \.self) { key in
NavigationLink("\(key)", value: key)
}
}
.navigationDestination(for: Int.self) { key in
if let value = data[key] {
VStack {
Text("This is \(value)").padding()
Button("Modify It") {
data[key] = "X"
}
}
}
}
}
}
}
- Запустите код и щелкните первый элемент в списке. . Это приведет вас к подробному представлению этого предмета.
- В подробном представлении отображается стоимость предмета. Также имеется кнопка для изменения значения. Нажмите на эту кнопку. Вы заметите, что значение в подробном представлении не меняется.
- Когда я нажимаю кнопку, код в списке выполняется. Это ожидаемо.
- Но замыкание, переданное в NavigationDestination() не, выполняется , что объясняет, почему подробное представление не обновляется.
Кстати, если я вернусь к корневому представлению и нажму на первый элемент, чтобы перейти к его деталям. просмотрите еще раз, замыкание, переданное в NavigationDestination(), будет выполнено, и подробное представление правильно отобразит измененное значение.
Подробнее здесь: https://stackoverflow.com/questions/729 ... en-state-c
Мобильная версия