当字典值更改时执行某些操作



我正在寻找一种在字典的值发生变化时运行一些代码的方法。我对 Swift 还很陌生,但这就是我目前所拥有的:

var objects: NSMutableDictionary {
    didChange(changeKind: keyValue, valuesAtIndexes: indexes, forKey: something){
    }
}

然而,这给了我一个编译错误(使用未解析的标识符),无论我做什么,我似乎都无法让它工作。有什么想法吗?

你要找的是didSet属性观察器。用法如下:

var objects: NSMutableDictionary? {
    didSet {
        // stuff
    }
}

请注意,如果您希望在属性更改之前而不是之后收到通知,willSet是另一种选择。在 willSet 的情况下,你会得到一个表示属性传入值的newValue变量,在 didSet 的情况下,一个表示传出值的oldValue属性。

正如下面@Paulw11提到的,当字典的内容发生变化时,这不会通知您。仅当重新分配变量时。如果您希望在字典中的值更新时收到通知,(AFAIK),则必须使用等效的 Swift 字典。

var swiftObjects: [NSObject: AnyObject]? {
    didSet {
        println(oldValue)
    }
}

你是如何解释这一点的:

class My {
    var dict = [String: String]() {
        didSet {
            print(oldValue)
        }
    }
}
let my = My()
my.dict["asd"] = "asd"
my.dict["bfg"] = "bfg"
my.dict = [String: String]()

输出:

[:]
["asd": "asd"]
["bfg": "bfg", "asd": "asd"]

所以每次增加新的价值时都会调用。

相关内容

  • 没有找到相关文章

最新更新