我遇到这个奇怪的问题从字符串中获取NSDate,如果输入的日期是该月的最后一天(例如:2016-3-31),则应用程序崩溃时“意外发现nil,同时展开一个可选项值。”这是我用来实现的NSDate扩展:
extension NSDate {
convenience
init(dateString:String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateStringFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
let d = dateStringFormatter.dateFromString(dateString)!
self.init(timeInterval:0, sinceDate:d)
}
}
它崩溃了:
let d = dateStringFormatter.dateFromString(dateString)!
我认为这意味着它无法将字符串转换为NSDate。但是,只有当日期是该月的最后一天时才会发生。如果我改变输入的字符串,例如,从“2016-3-31 02:00:00”改为“2016-3-30 02:00:00”它运行得很好。如果有人能帮助我解决这个问题,我们将不胜感激。
编辑:此代码工作正常。问题最终出现在我用于计算输入字符串的代码中,该代码在当天增加了1。我还将此更改为“if let”语句,以避免因类似疏忽导致的未来崩溃。因为它可能对其他人有用,这里是我用过的代码:
if let d = dateStringFormatter.dateFromString(dateString) {
self.init(timeInterval:0, sinceDate:d)
} else {
let d = dateStringFormatter.dateFromString("2017-12-15 00:00:00")
self.init(timeInterval:0, sinceDate:d!)
}
答案 0 :(得分:1)
嗯 - 运行你的代码,两者都在Playground中提供完美的字符串。
您可能会检查的一件事是,您的字符串格式不会在其他地方出现错误,因为此代码看起来不错,错误表明它无法生成d
。