当我将我的字符串转换为 NSDate
时,它返回 nil
并显示错误:
致命错误:在展开Optional值时意外发现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!
}
你可以指导是什么原因?
1 回答
问题是你的
dateFormatter
无法转换你正在传递的DateString
,因为你告诉它使用dateFormat
.因此它放弃并返回
nil
,这意味着当你运行这行时:date
的值是nil
接下来,您将获取
date
的值并说出"force unwrap this value and return it, I don't care if it is nil or not",如此处所示 .因为你的函数应该返回一个
NSDate
...这意味着你保证你总是会返回一个NSDate
而不是nil
的实例,然后你告诉它强制打开一些可以(并且在这种情况下)的东西nil
你的当你试图强行打开date
时,app会结束 .一般来说,强制在Swift中展开东西几乎总是一个坏主意,除非你绝对确定该值不是
nil
.所以,需要考虑以下几点:
你的
DateString
看起来怎么样?由于此值无法解析,因此该字符串或dateFormat
字符串必定存在问题 .你应该总是返回
NSDate
吗?或者你可以返回一个可选的,让你的方法的调用者担心你的convertDate
方法是否返回有用的东西?希望能给你一些合作的东西 .