gpt4 book ai didi

swift didSet 未在单例中调用

转载 作者:可可西里 更新时间:2023-11-01 01:02:39 25 4
gpt4 key购买 nike

假设我有一个单例经理

 class Manager {

static let sharedInstance = Manager()

var text: String {
didSet (value) { print("didSet \(value)") }
}

init () {
self.text = "hello"
}
}

如果我这样做

Manager.sharedInstance.text = "world"

文本仍然是'你好'但如果我做两次,第二次就是世界

最佳答案

它工作正常。

您所经历的行为可以用 2 个事实来解释

事实 1

作为苹果says didSet(以及 willSet)在 init 期间被调用。

The willSet and didSet observers provide a way to observe (and to respond appropriately) when the value of a variable or property is being set. The observers are not called when the variable or property is first initialized. Instead, they are called only when the value is set outside of an initialization context.

事实 2

didSet 的参数确实引用了旧值,所以你应该

  1. value 重命名为 oldValue
  2. print中使用text

由此可见

didSet (value) { print("didSet \(value)") }

对此

didSet (oldValue) { print("didSet \(text)") }

而不是在您的代码中打印旧值(已被覆盖的值)。

关于swift didSet 未在单例中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34086699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com