您好我正在开发一个具有一组唯一字符串的应用程序。我有一个函数来添加,删除,修改NSMutableSet中的项目。我想使用KVO(键值观察器)观察集合何时发生变化(添加,删除,修改项目)
这里是我的代码
dynamic var barCodeSet = NSMutableSet()
在viewDidload
中我添加了观察:
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不起作用。任何人都知道如何修改代码,以便我们可以在设置项目更改时获得通知?感谢
答案 0 :(得分:1)
假设您不需要使用NSMutableSet,您可以在变量声明中使用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的值时,其计数和内容都会打印到控制台。