【发布时间】:2017-06-29 14:33:41
【问题描述】:
在我们的 iphone 应用程序中,我们解析从 api 调用获得的日期。日期正确返回并且是有效日期。现在只有在某些设备上,它会在解包 Optional 值时因意外发现 nil 的错误而崩溃。这是有问题的代码:
//formatDate(date: date, format: FullDateFormat)
class func formatDate(date: String, format: String)->String{
if date.characters.count == 0 {return "" }
let formatter = DateFormatter()
formatter.dateFormat = Constants.FullDateFormat
let nsDate = formatter.date(from: date)
formatter.dateFormat = format
return formatter.string(from: nsDate!)
}
nsDate 没有被格式化,因为它是 nil。
Constants.FullDateFormat 是一个静态字符串,定义为“M/d/yyyy h:mm:ss a”,因为日期总是采用这种格式
类函数的调用如下所示
let newDate = Helpers.formatDate(date: "9/27/2017 9:26:51 AM", format: "h:mm a")
某些设备会崩溃,而大多数设备不会。如果我们不使用类函数,则应用程序可以正常工作。我没有看到任何原因,所以如果有人知道为什么会发生这种情况以及可能的解决方案,请告诉我。
这可能是重复的,但没有出现在我执行的任何搜索中。感谢社区,他们指出了另一个类似的问题,答案已经在stackoverflow。如果这是重复的,我深表歉意。
【问题讨论】:
-
你不应该使用
nsDate的强制解包,你应该把它放在一个保护声明中。很可能在您的应用程序崩溃的设备上,其他一些设置(例如语言环境)不同,这些设置会导致解析日期出现问题,因为您没有指定DateFormatter使用的大量信息 -
感谢 Martin R。我在搜索时没有看到这样的内容。我不介意删除它,但它可能对其他人有所帮助。我会编辑并指出您发布的问题。
-
解决方案与建议的“Martin R”相同,但我理解 Micah 的困惑。