#ios #swift #swiftui
Вопрос:
В настоящее время я отклоняю представление, выполнив следующее:
struct DestinationView: View {
@Environment(.presentationMode) private var presentationMode
var onDismiss: () -> Void
var body: some View {
Button("Dismiss") {
presentationMode.wrappedValue.dismiss()
onDismiss()
}
}
}
Как только представление отклонено, я уведомляю родительское представление, вызывая onDismiss
его для запуска действия в родительском представлении.
Однако мое действие срабатывает слишком рано, потому что на момент вызова onDismiss
это представление еще не завершило отклонение , и поэтому я вижу проблемы, связанные с расовыми условиями, в родительском представлении.
Есть ли эквивалент .dismiss(animated:completion:)
тому, что я могу использовать?
PS для дополнительного контекста:
я увольняю UIViewControllerRepresentable
координатора А.
Ответ №1:
Вы должны вызвать его с задержкой, чтобы завершить анимацию, например
Button("Dismiss") {
presentationMode.wrappedValue.dismiss()
DispatchQueue.main.asyncAfter(deadline: .now() 0.5) {
onDismiss()
}
}
Комментарии:
1. Слишком неопределенно.
2. Да, это тоже мой обходной путь, но это явно не решение , потому что мы просто угадываем время.