字符串扩展toDate()在某些设备上崩溃

我的问题是尝试将字符串转换为日期并崩溃。我的应用程序在App Store上并在我的设备上运行,但是在某些设备上崩溃了。我看着崩溃日志并看到它,当字符串更新时却崩溃了。我不明白为什么我的设备运行正常,或者某些设备运行正常,而其他设备却崩溃了。

func toDate() -> Date {

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+03:00" //Your date format
    dateFormatter.timeZone = TimeZone(abbreviation: "GMT+3:00") //Current time zone
    //according to date format your date string
    guard let date = dateFormatter.date(from: self) else {
        fatalError()
    }
    return date
}
wnrs19850312 回答:字符串扩展toDate()在某些设备上崩溃

两种解决方案:

  1. 为固定格式添加en_US_POSIX语言环境。
  2. 使用ISO8601DateFormatter(iOS 8+),好处是没有语言环境,没有日期格式,没有时区。

    func toDate() -> Date? {
        let dateFormatter = ISO8601DateFormatter()
        return dateFormatter.date(from: self) 
    }
    

无论如何,在生产环境中返回可选的fatalError()都会导致糟糕的用户体验。

,

您将崩溃,因为每当您尝试对不是以已定义字符串格式的日期的字符串执行此方法时,dateFormatter都会返回nil,然后您的保护声明将调用fatalerror()

只需返回dateformatter的输出并在调用站点处理可选内容即可。

func toDate() -> Date? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss+03:00" 
    dateFormatter.timeZone = TimeZone(abbreviation: "GMT+3:00") 
    return dateFormatter.date(from: self) 
}

您可能还想考虑只使用默认的当前语言环境时区,而不是指定一个?

本文链接:https://www.f2er.com/3152445.html

大家都在问