NSDateFormatter returns 无 swift 2

NSDateFormatter returns nil in swift 2

当我将字符串转换为 NSDate 时,它返回 nil

并显示错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

例如:日期 = 2016 年 8 月 9 日 9:45:19 上午

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! 
}

各位大神指导一下是什么原因?

问题是你的 dateFormatter 无法转换你正在传递的 DateString,鉴于你告诉它使用的 dateFormat

因此它放弃了 returns nil,这意味着当你 运行 这一行时:

let date = dateFormatter.dateFromString(DateString)

date的值为nil

接下来,您取 date 的值并说 "force unwrap this value and return it, I don't care if it is nil or not",如此处所示。

return date!

因为你的函数需要return一个NSDate...意味着你保证你将总是 return一个实例NSDate 而不是 nil,然后你告诉它强制解包某些东西(在这种情况下是)nil 当你尝试强制解包时,你的应用程序会崩溃 date.

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

所以,有几件事需要考虑:

  1. 您的 DateString 实际看起来如何?该字符串或您的 dateFormat 字符串一定有问题,因为无法解析该值。

  2. 你应该总是return一个NSDate吗?或者你可以 return 一个可选的而不是让你的方法的调用者担心你的 convertDate 方法 return 是否有用?

希望这能给你一些有用的东西。