2016-12-09 104 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

沒有。那些沒有什麼不同。 –