Используйте следующее для сравнения startDate с endDate
if Date().timeIntervalSince(endDate) < 0 {
// endDate ahead
} else {
// endDate expired
}
Пример для начала работы
class DataTimer {
static var shared = DataTimer()
var startDate: Date!
var endDate: Date!
private init() {
check()
}
func check() {
guard
let startDate = UserDefaults.standard.object(forKey: "kStartDate") as? Date,
let endDate = Calendar.current.date(byAdding: .month, value: 1, to: startDate)
else {
self.resetDates()
return
}
var interval = Date().timeIntervalSince(endDate)
guard interval < 0 else {
self.resetUserData()
self.resetDates()
return
}
self.startDate = startDate
self.endDate = endDate
// log remaining time
interval = abs(interval)
let log: [Int] = [86400.0, 3600.0, 60.0].map { value in
guard interval > value else { return 0 }
let returnValue = Int(floor(interval / value))
interval.formTruncatingRemainder(dividingBy: value)
return returnValue
}
print("Remaining: \(log[0])d \(log[1])h \(log[2])m \(Int(interval))s")
}
private func resetUserData() { }
private func resetDates() {
self.startDate = Date()
self.endDate = Calendar.current.date(byAdding: .month, value: 1, to: startDate)!
UserDefaults.standard.set(startDate, forKey: "kStartDate")
}
}
Использование-1
DataTimer.shared.check()
Использование-2 каждый раз, когда приложение запускается / входит на передний план в AppDelegate.swift
func applicationDidBecomeActive(_ application: UIApplication) {
DataTimer.shared.check()
}