首页 文章

NSDateFormatter在swift 2中返回nil

提问于
浏览
-2

当我将我的字符串转换为 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 回答

  • 0

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

    因此它放弃并返回 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!
    

    因为你的函数应该返回一个 NSDate ...这意味着你保证你总是会返回一个 NSDate 而不是 nil 的实例,然后你告诉它强制打开一些可以(并且在这种情况下)的东西 nil 你的当你试图强行打开 date 时,app会结束 .

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

    所以,需要考虑以下几点:

    • 你的 DateString 看起来怎么样?由于此值无法解析,因此该字符串或 dateFormat 字符串必定存在问题 .

    • 你应该总是返回 NSDate 吗?或者你可以返回一个可选的,让你的方法的调用者担心你的 convertDate 方法是否返回有用的东西?

    希望能给你一些合作的东西 .

相关问题