class ParentViewController: UIViewController { let button: UIButton() ... func onTapButton() { let popupVC = PopupViewController() popupVC.onDoneBlock = { [weak self] in self?.moveToNextView() } } func moveToNextView() { ... } } class PopupViewController: UIViewController { let closeButton: UIButton() var onDoneBlock: (() -> Void)? = nil func onTapButton() { self.dismiss(true, completion: self.onDoneBlock) } }