SwiftUI 4: представление места назначения NavigationDestination() не обновляется при изменении состоянияIOS

Программируем под IOS
Anonymous
SwiftUI 4: представление места назначения NavigationDestination() не обновляется при изменении состояния

Сообщение Anonymous »

Во время экспериментов с новым NavigationStack в SwiftUI 4 я обнаружил, что при изменении состояния представление назначения, возвращаемое функцией NavigationDestination(), не обновляется. См. код ниже.

Код: Выделить всё

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

Вернуться в «IOS»