2016-12-09 62 views
-2

返回nil当我将字符串转换为NSDate,它返回nilNSDateFormatter斯威夫特2

,并显示错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

例如:日期= 2016年8月9日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! 
} 

你可以指导什么原因?

+2

同样的问题在这里一遍又一遍地被问到。 –

+1

由于'在解包可选值时发现nil'是新的'日期格式化程序返回nil',所以您设法通过在同一个问题中使用这两个参数来将这种情况提升到一个新的水平。 – Desdenova

回答

0

问题是您的dateFormatter无法转换您通过它的DateString,因为您已经告诉它使用dateFormat

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

let date = dateFormatter.dateFromString(DateString) 

datenil

接下来,你拿的date的价值,并说“强制解开这个值并返回它,我不在乎它是否为零“,正如在这里可以看到的。

return date! 

当你的功能有望恢复一个NSDate ......这意味着你保证,你将永远返回NSDate而不是nil一个实例,然后你告诉它强制解包东西,可以是(并且在这种情况下)nil当您尝试强制解包date时,您的应用会龙骨翻转。

一般来说,在Swift中强制展开事物几乎总是一个坏主意,除非您确定该值不是nil

所以,一对夫妇的事情要考虑:

  1. 请问你DateString实际上看?由于该值无法解析,因此该字符串或dateFormat字符串必定有问题。

  2. 如果你总是会退回NSDate?或者你可以返回一个可选项,并让你的方法的调用者担心你的convertDate方法是否返回有用或没有用的东西?

希望能够给你一些工作。

+0

我检查了这些,但问题是,当我测试这个错误发生在手机上。问题是,当我测试这个错误发生在手机上 –

+0

好的,可能是这些手机上的日期格式是不同于你期望的那个?例如不同的地区格式? – pbodsk

+0

没有。那些没有什么不同。 –