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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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