Swift 3 KVO观察nsmutableet的变化(添加,删除,修改项)



我正在开发一个应用程序,它有一组唯一的字符串。我有一个在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的值时,它的计数和内容将被打印到控制台

最新更新