我正在开发一个应用程序,它有一组唯一的字符串。我有一个在nsmutableet中添加,移除,修改项目的函数。我想使用KVO(键值观察者)来观察每当集合发生变化(添加,删除,修改项)
下面是我的代码:
dynamic var barCodeSet = NSMutableSet()
在viewDidload
中添加observe:
override func viewDidLoad() {
super.viewDidLoad()
addObserver(self, forKeyPath: #keyPath(barCodeSet), options: [.old,.new,.initial], context: nil)
}
我的观察函数是:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(barCodeSet) {
print(barCodeSet.count)
for barcode in barCodeSet {
print(barcode)
}
}
}
我不知道为什么KVO不工作。我如何修改代码,以便当设置项更改时我们可以得到通知?
假设你不需要使用nsmutableet,你可以在变量声明中使用didSet子句。在操场上尝试以下操作:
import UIKit
class myClass {
init() {
}
dynamic var barCodeSet: Set<String> = Set<String>() {
didSet {
print(barCodeSet.count)
for barcode in barCodeSet {
print(barcode)
}
}
}
}
let thisClass = myClass()
thisClass.barCodeSet = ["Apples", "Bananas", "Oranges"]
thisClass.barCodeSet.insert("Grapes")
当你设置barCodeSet的值时,它的计数和内容将被打印到控制台