Swift delegado entre dos VC sin segue

Tengo 3 clases:

ChatLogControollerGetImageFromLibraty (clase NSObject) ImagePreviewViewController

Quiero presionar un clip del primer VC, luego abrir la biblioteca de medios para elegir una imagen. Luego, la imagen seleccionada se pasa al tercer VC como previewController. Luego, si selecciono 'hecho', quiero pasarlo al primer VC.

1st VC

class ChatLogControoller: UICollectionViewController, UICollectionViewDelegateFlowLayout, NSFetchedResultsControllerDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate, DataSentDelegate {

func recievePhoto(data: UIImage) {
    imageFromView = data
    print("-------\(imageFromView = data)")
}

override func viewDidLoad() {
    super.viewDidLoad()

    let vc = ImagePreviewController()
    self.vc.delegate = self
}

¡La segunda clase es solo un selector de imagen, por lo que paso la imagen a 3rd VC y esta imagen aparece en imageView de 3rd VC correctament

my 3rd VC

protocol DataSentDelegate {
    func recievePhoto(data: UIImage)
}
class PreviewController: UIViewController, UIScrollViewDelegate {

var delegate : DataSentDelegate? = nil

var aImageView: UIImageView!
var aImage: UIImage!

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action:, #selector(actionSend))
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(actionBack))

}

@objc func actionBack() {

    dismiss(animated: false, completion: nil)
}

@objc func actionSend() {

    let data = aImageView.image
    delegate?.recievePhoto(data: data!)
    dismiss(animated: true, completion: nil)
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta