Swift 3个KVO观察NSMutableSet的变化(添加、删除、修改item)
Swift 3 KVO to observe change in NSMutableSet (add, remove, modify item)
您好,我正在开发一个具有一组唯一字符串的应用程序。我有一个函数可以添加、删除、修改 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 不工作。任何人都知道如何修改代码以便我们可以在设置项更改时得到通知?谢谢
假设您不需要使用 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 的值,其计数和内容都会打印到控制台。
您好,我正在开发一个具有一组唯一字符串的应用程序。我有一个函数可以添加、删除、修改 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 不工作。任何人都知道如何修改代码以便我们可以在设置项更改时得到通知?谢谢
假设您不需要使用 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 的值,其计数和内容都会打印到控制台。