I am new to Swift and was wondering on how to pass data from ViewController to ViewController that isn’t connected by segue. I have spend 2 hours on this and still can’t figure a way to do it.
Edit: The problem that I am confused on is How to take out all the stacked ViewController expect the root ViewController while being able to pass data back to the first ViewController from ViewController3 with 'navigationController?.popToRootViewController(animated: false)'
class ViewController: UIViewController, nameDelegate {
    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var textfield1: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        label1.text = "Name"
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc2 = segue.destination as! ViewController2
        vc2.middleOfTransferingName = textfield1.text!
    }
    @IBAction func buttonPressed1(_ sender: Any) {
        performSegue(withIdentifier: "go2", sender: self)
    }
    func nameThatWasEntered(name: String) {
        label1.text = name
    }
}
class ViewController2: UIViewController, nameDelegate {
    var middleOfTransferingName: String = ""
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc3 = segue.destination as! ViewController3
        vc3.transferedWithSegueLabelText = middleOfTransferingName
        vc3.namePassBack = self
    }
    @IBAction func buttonPressed2(_ sender: Any) {
        performSegue(withIdentifier: "go3", sender: self)
    }
    func nameThatWasEntered(name: String) {
    }
}
protocol nameDelegate {
    func nameThatWasEntered(name: String)
}
class ViewController3: UIViewController {
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var textfield3: UITextField!
    var transferedWithSegueLabelText: String = ""
    var namePassBack: nameDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
        label3.text = transferedWithSegueLabelText
    }
    @IBAction func buttonPressed3(_ sender: Any) {
        namePassBack!.nameThatWasEntered(name: textfield3.text!)
        navigationController?.popToRootViewController(animated: false)
    }
}
 
    