我正在寻找一种在字典的值发生变化时运行一些代码的方法。我对 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"]
所以每次增加新的价值时都会调用。