我正在尝试比较时间,跟着这个link,但它在我身上崩溃了。我确实有相同的代码,但它会在dateComponents
行或sorted()
行上崩溃,具体取决于我放置函数的位置。
func setCurrentTime(times: [String]) {
let formatter = DateFormatter()
formatter.dateFormat = "h: mm a"
let timeMap = times.map {
Calendar.current.dateComponents([.hour, .minute], from: formatter.date(from: $0)!)
} // Crashes here ...
let upcomingTIme = timeMap.map {
Calendar.current.nextDate(after: Date(), matching: $0, matchingPolicy: .nextTime)!
}
print(upcomingTime) // Returns []
let nextTime = upcomingTIme.sorted().first! // Crashes here too, error line shown below
print(nextTime) // Doesn't get printed...
}
ERROR:
[]
fatal error: unexpectedly found nil while unwrapping an Optional value
如果我在函数中传入数组或硬编码数组,它仍会崩溃。
答案 0 :(得分:0)
您获得的崩溃是由于日期格式化程序中使用的传递值和格式的格式不同。
formatter.dateFormat = "h: mm a"
虽然您的格式化程序在' h:' 和' mm' 之间使用了空格,但您可能已经传递了以下数据。 (凌晨4:30没有4:30之间的空格
let times = ["4:30 AM","1:00 PM","3:20 PM","6:40 PM","9:10 PM"]
日期格式化程序不会返回有效日期,您使用了'!'操作员导致崩溃。
您可以根据格式更改日期格式或传递数据。这将解决问题,你将得到
[小时:4分钟:30 isLeapMonth:false,小时:13分钟:0 isLeapMonth:false,小时:15分钟:20 isLeapMonth:false,小时:18分钟:40 isLeapMonth:false,小时:21分钟:10 isLeapMonth:false]
2017-10-01 13:10:00 +0000
[2017-10-01 23:00:00 +0000,2017-10-02 07:00:00 +0000,2017-10-02 09:50:00 +0000,2017-10-01 13: 10:00 +0000,2017-10-01 15:40:00 +0000]