Hello @Nicow
Tu peux en effet utiliser un protocole pour faire communiquer ton PopOverViewController avec ton ViewController. Après, tu pourrais aussi (je pense), passer une référence de ton ViewController à ton PopOverViewController, ce qui permettrait de « remplir » celui-ci depuis ton PopOverViewController.
Par rapport au delegate, voici ce que tu peux faire:
Dans ton ViewController, tu crées un protocole (appelons le ViewController Delegate):
protocol ViewControllerDelegate {
func getData(name: String)
}
Dans ce protocole, tu peux mettre les fonctions que tu souhaites, par exemple, ici, j’ai uniquement mis une fonction getData qui reçoit un nom, mais tu peux aussi passer autre chose par cette fonction si tu veux.
Une fois que le protocole est créé, tu l’implémentes sur ton ViewController, comme ceci:
class ViewController: UIViewController, ViewControllerDelegate
En faisant ça, tu vas devoir implémenter les méthodes de ton protocol, ce qui donnera:
func getData(name: String) {
// ta logique, par exemple, tu peux créer une variable name dans ton ViewController, comme ceci: var name: String?
// et ensuite, faire ceci: self.name = name
}
Dernière chose à faire dans le ViewController, dans la fonction:
prepare(for segue: UIStoryboardSegue)
tu peux faire quelque chose comme ceci:
if segue.identifier == "mySegue" {
if let destination = segue.destination as? PopOverViewController {
destination.viewControllerDelegate = self // viewControllerDelegate est une variable que l'on va définir dans le PopOverViewController
}
}
Tu vérifies le segue que tu vas pusher (avec son identifier), ensuite, tu vérifies que la destination de ce segue est bien de type PopOverViewController, et si tel est le cas, tu définis le delegate de ta destination comme étant ce controller-ci.
En faisant ça, tu dis que ton PopOverViewController aura une référence vers les fonctions du protocole de ton ViewController, et donc, depuis ton PopOverViewController, tu pourras appeler la fonction « getData » par exemple.
Enfin, dernière chose à faire, dans ton PopOverViewController:
Tu définis une variable qui correspond au delegate:
var viewControllerDelegate: ViewControllerDelegate?
et ensuite, tu peux utiliser les fonctions de ce delegate pour faire passer des informations depuis ton PopOverViewController vers ton ViewController en faisant ceci:
viewControllerDelegate?.getData(name: "mon super nom")
Par exemple, si tu fais un bouton qui ferme ton PopOverViewController, comme ceci:
@IBAction func dismissAction(_ sender: UIButton) {
viewControllerDelegate?.getData(name: "mon super nom")
self.dismiss(animated: true, completion: nil)
}
Une fois de retour dans ton ViewController, tu auras effectué la méthode « getData », donc, tu auras accès aux informations que tu as passé via le protocole depuis ton PopOverViewController.
Le concept n’est pas le plus simple à comprendre au début (je trouve), mais une fois compris, il est assez pratique! 
Voici le code en entier, pour te permettre d’avoir une vue d’ensemble sur ce que j’ai expliqué plus haut:
Le storyboard:
Le ViewController et le protocole:
Le PopOverViewController:
Si tu as des questions, n’hésite pas à les poser, nous sommes là pour y répondre et t’aider au besoin.
En espérant t’avoir aidé,
Bonne journée,
Alexandre