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

时间:2016-11-04 10:17:28

标签: swift set key-value-observing

您好我正在开发一个具有一组唯一字符串的应用程序。我有一个函数来添加,删除,修改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不起作用。任何人都知道如何修改代码,以便我们可以在设置项目更改时获得通知?感谢

1 个答案:

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