Por que nenhum loop infinito no didSet?

No meu FirstViewController, tenho um botão direcionando para o SecondViewController, transmitindo dados para uma propriedade no SecondViewController. Essa propriedade possui um observador de propriedades, criando uma nova instância do SecondViewController quando configurada.

Enquanto está funcionando como eu quero, pergunto-me por que não fica preso em um loop infinito, criando uma instância do SecondViewController para sempre. E é uma boa prática fazer dessa maneira?

FirstViewController:

class FirstViewController: UIViewController {
    @IBAction func something(sender: UIButton) {
        let destination = storyboard?.instantiateViewControllerWithIdentifier("secondViewController") as SecondViewController
        destination.selected = 1
        showViewController(destination, sender: self)
    }
}

SecondViewController:

class SecondViewController: UIViewController {
    var selected: Int = 0 {
        didSet {
            let destination = storyboard?.instantiateViewControllerWithIdentifier("secondViewController") as SecondViewController
            destination.selected = selected
            showViewController(destination, sender: self)
        }
    }

    @IBAction func something(sender: UIButton) {
        selected = 2
    }
}

questionAnswers(1)

yourAnswerToTheQuestion