为什么 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
块的第一行放置一个断点,我相信它应该只被调用一次。
在我的 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
块的第一行放置一个断点,我相信它应该只被调用一次。