如何检测Swift中的日变化

如何检测Swift中的日变化,swift,observers,Swift,Observers,我希望我的应用程序在改天时运行 因此,在我的appDelegate中,我将 func applicationSignificantTimeChange(_ application: UIApplication){ //this one fires } 在应该更新其内容的ViewController中,我执行以下操作: override func viewDidLoad() { NotificationCenter.default.addObserver(

我希望我的应用程序在改天时运行

因此,在我的appDelegate中,我将

func applicationSignificantTimeChange(_ application: UIApplication){
        //this one fires
    }
在应该更新其内容的ViewController中,我执行以下操作:

override func viewDidLoad() {
        NotificationCenter.default.addObserver(self, selector: #selector(self.dayChanged(notification:)), name: Notification.Name("significantTimeChangeNotification"), object: nil)

    }

不知何故,当调用AppDelegate中的func时,观察者似乎对该事件视而不见


这是语法,还是仅仅是对机制的误解?

您需要为UIApplicationsSignificantTimeChangeNotification添加一个观察者:

对于Swift 4.2或更高版本

注意:如果您希望在日期更改时收到通知,则可以使用.NSCalendarDayChanged而不是UIApplication.SignificationTimeChangeNotification


@Sjakelien请注意,您可能希望.NSCalendarDayChanged而不是UIApplication.SignificationTimeChangeNotification好的一点。我试试看。此外,显然AppDelegate部分根本不是必需的是,通常不需要使用AppDelegate方法。正确的方法是添加观察者并在视图控制器中实现实例方法。
@objc func dayChanged(notification: NSNotification){
        //this one doesn't fire
    }
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: UIApplicationSignificantTimeChangeNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: UIApplication.significantTimeChangeNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: .NSCalendarDayChanged, object: nil)