Обработчик завершения для представления MODE.wrappedValue.dismiss()

#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. Да, это тоже мой обходной путь, но это явно не решение , потому что мы просто угадываем время.