我正在制作一种基于挑战的应用程序,要求用户每天回来。如果有一天他错过了,他就必须重新开始。 我的问题是我的 dateChanged() 函数;第一件事是,它的工作不太可靠,第二件事是我只是检查日期是否更改,因此我不知道使用该应用程序之间是否有一两天。 这是我当前的功能:
public func changeDays()
{
myFormatter.dateStyle = .short
myFormatter.locale = Locale(identifier: "de_DE")
oldDate = defaults.string(forKey: "oldDate")!
let newDate = Date()
let newDateString = myFormatter.string(from: newDate)
if newDateString == oldDate
{
NumberOfDaysInARow.text = "\(days) / 30"
}
else if newDateString != oldDate
{
days += 1
NumberOfDaysInARow.text = "\(days) / 30"
defaults.set(days, forKey: "days")
}
oldDate = newDateString
defaults.set(oldDate, forKey: "oldDate")
}
就在今天,当我在 iPhone 上启动应用程序时,它开始出现 fatal error ,但在模拟器中却没有发生......很奇怪。 我必须如何更改我的函数以使其 100% 可靠(并且正常工作),同时还能够检查两个日期之间的时间量?
感谢您的浏览!祝你有美好的一天
最佳答案
您可以使用下面的函数扩展 Date,该函数返回距另一个日期的天数。
extension Date {
// Returns the amount of days from another date
func days(from date: Date) -> Int {
return Calendar.current.dateComponents([.day], from: date, to: self).day ?? 0
}
}
您可以将其设置为默认日期,而不是将 oldDate 保存为字符串:
defaults.set(Date(), forKey: "oldDate")
您可以使用以下方式从默认值获取旧日期:
let oldDate = defaults.object(forKey:"oldDate") as! Date
一旦你有了旧约会
let dateNow = Date()
let timeDifference = dateNow.days(from: oldDate!)
If timeDifference > 1 {
// older than 1 day
} else {
// Streak still alive
}
}
关于ios - 如何检查两个 NSDate 之间的时间量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126753/