2014-09-10 88 views
0

我剛更新到Xcode 6 GM,我正在修復一些已出現的問題。現在大部分工作正在進行,但是我遇到了一個錯誤,我不確定如何糾正。更新到Xcode 6後可選的值錯誤GM

我在vieDidLoad()這樣的代碼:

currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    currencyFormatter.currencyCode = NSLocale.currentLocale().displayNameForKey(NSLocaleCurrencySymbol, value: NSLocaleCurrencyCode)! 

我得到第二行的錯誤。

fatal error: unexpectedly found nil while unwrapping an Optional value 

我敢肯定,解決方案很簡單,但我很新的編程,所以我一直沒能找到修復。

+0

當您使用顯式展開時,確保結果永遠不會爲零。相反,不要使用顯式的解包和測試nil,並使用'if'來避免零。 – zaph 2014-09-10 13:39:31

回答

3

您正在使用錯誤的方法獲取貨幣代碼。這不會是一個問題,該方法只返回nil,因爲它找不到該值。但是,您通過添加!明確地解開了可選項,這應該避免。

我建議以下代碼:

currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 

let locale = NSLocale.currentLocale() 
if let currencyCode = locale.objectForKey(NSLocaleCurrencyCode) as? String { 
    currencyFormatter.currencyCode = currencyCode 
} 

這隻會貨幣代碼,如果它是由objectForKey方法返回。由於POB在下面的評論中正確指出,objectForKey返回AnyObject?。在這種情況下,可以安全地添加as? String,將其轉換爲String?

+0

您的代碼將生成警告和Xcode 6 GM的錯誤消息。爲了解決它,你應該改變你的第二行:'如果讓currencyCode = NSLocale.currentLocale()。objectForKey(NSLocaleCurrencyCode)爲?字符串{'。 – 2014-09-10 13:56:29

2

currencyCodecurrencyFormatter的財產屬於String類型。當你想將其設置爲您的設備的當前區域貨幣代碼,您必須使用下面的代碼:

let currencyFormatter = NSNumberFormatter() 
currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
currencyFormatter.currencyCode = NSLocale.currentLocale().objectForKey(NSLocaleCurrencyCode) as String 
println(currencyFormatter.currencyCode) //Will display "USD", for example 

然而,作爲圭多亨德里克斯指出,objectForKey:回報AnyObject?Swift編程語言建議使用可選綁定來安全地打開可選項。因此,您的代碼應該如下所示:

let currencyFormatter = NSNumberFormatter() 
currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
if let currencyCode = NSLocale.currentLocale().objectForKey(NSLocaleCurrencyCode) as? String { 
    currencyFormatter.currencyCode = currencyCode 
    println(currencyFormatter.currencyCode) //Will display "USD", for example 
} 
+0

通過這種方式,您可以將'AnyObject?'向下翻轉爲'String',也可以解開可選項。如果它是'nil',會使應用程序崩潰。 – 2014-09-10 14:04:38

+0

@Guido Hendriks:更新。謝謝。 – 2014-09-10 14:20:05