检查日期何时过去 - 斯威夫特

Har*_*ish 2 time nsdate nscalendar swift

好吧,标题几乎说明了一切.我想要做的是检查日期何时过去.因此,举例来说,让我们说用户正在使用我的应用程序然后他们上午睡觉并在早上检查我的应用程序.当我的应用程序打开时,我需要检查一天是否发生了变化.

此外,我不需要在应用程序终止或在后台或任何内容时知道此信息.我只需要知道应用程序运行时用户是否正在与之交互时日期是否已更改.

注意:我已经查看了与此问题有关的其他Stack Overflow帖子,但没有一个帮助过我.

vad*_*ian 7

实施观察

NSCalendarDayChangedNotification
Run Code Online (Sandbox Code Playgroud)

每当系统日历日更改时发布,由系统日历,区域设置和时区决定.此通知不提供对象.

如果设备在白天更改时处于睡眠状态,则此通知将在唤醒时发布.如果设备已经睡了好几天,则只有一个通知会在唤醒时发布.

无法保证观察员何时收到此通知的及时性.因此,您不应该依赖于在任何确切时间发布或接收的此通知.

通知将通过发布[NSNotificationCenter defaultCenter].

例:

applicationDidFinishLaunching

NSNotificationCenter.defaultCenter().addObserver(self, selector:"calendarDayDidChange:", name:NSCalendarDayChangedNotification, object:nil)
Run Code Online (Sandbox Code Playgroud)

并实施该方法

func calendarDayDidChange(notification : NSNotification)
{
   doSomethingWhenDayHasChanged()
}
Run Code Online (Sandbox Code Playgroud)

或使用块API.

如果包含观察者的类不是应用程序委托类,则可能会在某个时候删除观察者.


vil*_*llb 6

更新 Vadian 对 Swift 5 的回复:

NotificationCenter.default.addObserver(self, selector:#selector(self.calendarDayDidChange(_:)), name:NSNotification.Name.NSCalendarDayChanged, object:nil)
Run Code Online (Sandbox Code Playgroud)

并实现方法

@objc private func calendarDayDidChange(_ notification : NSNotification) {
    doSomethingWhenDayHasChanged()
}
Run Code Online (Sandbox Code Playgroud)