首页 > 解决方案 > 日期时间格式化程序崩溃

问题描述

在我的代码dateFormatter.date中多次循环使用(超过 100 次),即使输入日期格式正确,有时我也会崩溃。获取日期为零(有时)。

循环中的 getDayFromDate() 函数并将从 Web 服务接收到的不同日期(例如 2018-06-17T00:00:00)作为参数传递。总是将时间传递为​​ 00:00:00。inputDateString 被检查并且它始终是正确的格式。

    extension Formatter {
    static let enUSPOSIX: DateFormatter = {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: "en_US_POSIX")//For 11.3.1 version change
        return formatter
    }()
}

func getDayFromDate(inputDateString: String) -> Int{
    let dateFormatter = Formatter.enUSPOSIX

    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    let date = dateFormatter.date(from: inputDateString )    //  e.g. 2018-06-17T00:00:00
    dateFormatter.timeZone = TimeZone(identifier: "UTC")
    let calendar = Calendar.current
    let dayComponent = calendar.component(.day, from: date!)
    return dayComponent

}

我观察到,当 iPhone 中运行的后台应用程序太多时,它只会崩溃。

标签: iosswiftdatetimeswift4

解决方案


编写代码时不要使用强制解包。如果您的变量保持 nil 值,它将崩溃

更改您的代码

let dayComponent = calendar.component(.day, from: date!)

if let convertedDate = date {
  let dayComponent = calendar.component(.day, from: convertedDate)
}

推荐阅读