NSDateFormatter在swift 2中返回nil

时间:2016-12-09 12:33:40

标签: swift swift2 nsdate nsdateformatter

当我将字符串转换为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! 
}

您可以指导原因是什么?

1 个答案:

答案 0 :(得分:0)

问题在于,dateFormatter无法转换您传递的DateString,因为您已告知其使用dateFormat

因此它放弃并返回nil,这意味着当你运行此行时:

let date = dateFormatter.dateFromString(DateString)

date的值为nil

接下来,你取date的值并说"强制打开这个值然后返回它,我不在乎它是否为零",可以看出这里。

return date!

由于您的功能预计会返回NSDate ...这意味着您保证总是返回NSDate而不是nil的实例,然后你告诉它在你试图强行打开nil时,强制解开你的应用程序可以(并且在这种情况下)date的东西。

一般来说,强制在Swift中展开内容几乎总是一个坏主意,除非你绝对确定该值不是nil

因此,需要考虑以下几点:

  1. 您的DateString实际上看起来如何?由于无法解析此值或dateFormat字符串,因此必定存在问题。

  2. 您是否应始终返回NSDate?或者你可以返回一个可选项,让你的方法的调用者担心你的convertDate方法是否返回有用的东西吗?

  3. 希望能为你提供一些工作。