Как запустить функцию в предыдущем VC при выполнении dismiss?

Чтобы запустить функцию в предыдущем UIViewController (VC) при выполнении операции dismiss, вам понадобится использовать замыкание (closure) или делегирование (delegation) для передачи информации из текущего VC в предыдущий VC.

Вариант с использованием замыкания (closure):

  1. В предыдущем VC, в котором вы хотите вызвать функцию при выполнении операции dismiss, нужно добавить проперти с типом замыкания (closure). Например:
var dismissCompletionHandler: (() -> Void)?
  1. Затем, при создании текущего VC или перед его отображением, вы должны присвоить значение этому замыканию. Например:
let currentVC = CurrentViewController()
currentVC.dismissCompletionHandler = {
    // ваша функция для выполнения при dismiss
}
  1. Затем, при выполнении операции dismiss в текущем VC, вызовите замыкание (closure). Например:
dismiss(animated: true) {
    self.dismissCompletionHandler?()
}
  1. Когда операция dismiss будет завершена, замыкание будет вызвано и выполнит функцию в предыдущем VC.

Вариант с использованием делегирования (delegation):

  1. Создайте протокол (protocol), который будет определять метод, который нужно вызвать в предыдущем VC при выполнении dismiss. Например:
protocol DismissDelegate {
    func didDismiss()
}
  1. В предыдущем VC сделайте его конформным (conform) к этому протоколу и определите метод didDismiss(). Например:
class PreviousViewController: UIViewController, DismissDelegate {
    func didDismiss() {
        // ваша функция для выполнения при dismiss
    }
}
  1. При отображении текущего VC, установите его делегатом (delegate) предыдущий VC. Например:
let currentVC = CurrentViewController()
currentVC.delegate = previousVC
  1. В текущем VC, вызовите метод делегата при выполнении операции dismiss. Например:
dismiss(animated: true) {
    self.delegate?.didDismiss()
}
  1. При выполнении операции dismiss, метод didDismiss() будет вызван в предыдущем VC, и вы сможете выполнить нужную вам функцию.

Оба этих подхода позволяют запустить функцию в предыдущем VC при выполнении dismiss. Выбор между замыканием и делегированием зависит от контекста и предпочтений разработчика.