当我将字符串转换为NSDate
时,它会返回nil
并显示错误:
致命错误:在解包可选值时意外发现nil
例如:date = 8/9/2016 9:45:19 AM
convertDate(DateString:String) -> NSDate{
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy hh:mm:ss a"
let date = dateFormatter.dateFromString(DateString)
print(date) // return nil
return date!
}
您可以指导原因是什么?
答案 0 :(得分:0)
问题在于,dateFormatter
无法转换您传递的DateString
,因为您已告知其使用dateFormat
。
因此它放弃并返回nil
,这意味着当你运行此行时:
let date = dateFormatter.dateFromString(DateString)
date
的值为nil
接下来,你取date
的值并说"强制打开这个值然后返回它,我不在乎它是否为零",可以看出这里。
return date!
由于您的功能预计会返回NSDate
...这意味着您保证总是返回NSDate
而不是nil
的实例,然后你告诉它在你试图强行打开nil
时,强制解开你的应用程序可以(并且在这种情况下)date
的东西。
一般来说,强制在Swift中展开内容几乎总是一个坏主意,除非你绝对确定该值不是nil
。
因此,需要考虑以下几点:
您的DateString
实际上看起来如何?由于无法解析此值或dateFormat
字符串,因此必定存在问题。
您是否应始终返回NSDate
?或者你可以返回一个可选项,让你的方法的调用者担心你的convertDate
方法是否返回有用的东西吗?
希望能为你提供一些工作。