为什么 didSet 中没有无限循环?

Why no Infinite loop in didSet?

在我的 FirstViewController 中,我有一个按钮指向我的 SecondViewController,将数据传递到 SecondViewController 中的 属性。这个 属性 有一个 属性 观察者,在设置时创建一个新的 SecondViewController 实例。

虽然它按我想要的方式工作,但我想知道为什么它没有陷入无限循环,永远创建 SecondViewController 的实例。这样做是好的做法吗?

第一视图控制器:

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

第二个视图控制器:

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
    }
}

如果您在 The Swift Programming Language - Properties 中查看 Apple 的 Swift 文档,Apple 会说:

Note:

If you assign a value to a property within its own didSet observer, the new value that you assign will replace the one that was just set.

所以如果你在你的 didSet 块的第一行放置一个断点,我相信它应该只被调用一次。