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

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

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

1. В предыдущем VC, в котором вы хотите вызвать функцию при выполнении операции dismiss, нужно добавить проперти с типом замыкания (closure). Например:

var dismissCompletionHandler: (() -> Void)?

2. Затем, при создании текущего VC или перед его отображением, вы должны присвоить значение этому замыканию. Например:

let currentVC = CurrentViewController()
currentVC.dismissCompletionHandler = {
    // ваша функция для выполнения при dismiss
}

3. Затем, при выполнении операции dismiss в текущем VC, вызовите замыкание (closure). Например:

dismiss(animated: true) {
    self.dismissCompletionHandler?()
}

4. Когда операция dismiss будет завершена, замыкание будет вызвано и выполнит функцию в предыдущем VC.

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

1. Создайте протокол (protocol), который будет определять метод, который нужно вызвать в предыдущем VC при выполнении dismiss. Например:

protocol DismissDelegate {
    func didDismiss()
}

2. В предыдущем VC сделайте его конформным (conform) к этому протоколу и определите метод didDismiss(). Например:

class PreviousViewController: UIViewController, DismissDelegate {
    func didDismiss() {
        // ваша функция для выполнения при dismiss
    }
}

3. При отображении текущего VC, установите его делегатом (delegate) предыдущий VC. Например:

let currentVC = CurrentViewController()
currentVC.delegate = previousVC

4. В текущем VC, вызовите метод делегата при выполнении операции dismiss. Например:

dismiss(animated: true) {
    self.delegate?.didDismiss()
}

5. При выполнении операции dismiss, метод didDismiss() будет вызван в предыдущем VC, и вы сможете выполнить нужную вам функцию.

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