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

时间:2015-03-31 07:39:37

标签: swift didset

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

虽然它按照我的意愿工作,但我想知道为什么它不会陷入无限循环,永远创建一个SecondViewController实例。这样做是不错的做法?

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

1 个答案:

答案 0 :(得分:2)

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

  

注意:

     

如果为其自己的didSet观察者中的属性赋值,则分配的新值将替换刚刚设置的值。

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