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 的值,其计数和内容都会打印到控制台。