Swift 当NSUserDefaults.standardUserDefaults()中的if值更改时调用函数

Swift 当NSUserDefaults.standardUserDefaults()中的if值更改时调用函数,swift,variables,swift2,nsuserdefaults,Swift,Variables,Swift2,Nsuserdefaults,我有一个从NSUserDefaults.standardUserDefaults()变成值的变量 我有一个名为setGiftCount()的函数 我需要在变量GiftCount更改时调用此函数。。。怎么做?首先 NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: "Gift", options: NSKeyValueObservingOptions.New, context: nil) 秒 deinit {

我有一个从NSUserDefaults.standardUserDefaults()变成值的变量

我有一个名为setGiftCount()的函数


我需要在变量GiftCount更改时调用此函数。。。怎么做?

首先

NSUserDefaults.standardUserDefaults().addObserver(self, forKeyPath: "Gift", options: NSKeyValueObservingOptions.New, context: nil)

deinit {
    NSUserDefaults.standardUserDefaults().removeObserver(self, forKeyPath: "Gift")
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    setGiftCount()
}
第三

deinit {
    NSUserDefaults.standardUserDefaults().removeObserver(self, forKeyPath: "Gift")
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    setGiftCount()
}
重写函数observeValueForKeyPath(键路径:String?,对象的类型:AnyObject?,更改:[String:AnyObject]?,上下文:UnsafeMutablePointer){
setGiftCount()
}

您可以向视图控制器添加NSUserDefaultsIDChangeNotification的观察者:

添加:

NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil)
删除它:

NotificationCenter.default.removeObserver(self, name: UserDefaults.didChangeNotification, object: nil)
并添加选择器方法:

func userDefaultsDidChange(_ notification: Notification) {
    // your code...   setGiftCount()
}

只需添加NSUserDefaultsIDChangeNotificationBTW NSUserDefaults有一个名为IntegerWorker的方法请告诉我如何添加NSUserDefaultsIDChangeNotification的观察者对于那些在@LeoDabus的回复中丢失的人,从Swift3/iOS 10开始,现在是UserDefaults.didChangeNotification。下面是如何在Swift中使用带有UserDefaults的KVO的答案:这里的困难在于您不知道哪个值已更改,而只知道其中一个值已更改。也没有随通知一起传递的
userInfo
。如果self或子类观察到任何其他情况,这将导致意外行为。您应该指定一个
上下文
并在该上下文上进行分支。