更新到Xcode 6 GM后的可选值错误

时间:2014-09-10 13:19:13

标签: swift

我刚刚更新到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

我确信解决方案很简单,但我对编程很新,所以我找不到修复方法。

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:2)

currencyCode的{​​{1}}属性属于currencyFormatter类型。如果要将其设置为设备的当前区域设置货币代码,则必须使用以下代码:

String

然而,正如Guido Hendriks所指出的那样,let currencyFormatter = NSNumberFormatter() currencyFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle currencyFormatter.currencyCode = NSLocale.currentLocale().objectForKey(NSLocaleCurrencyCode) as String println(currencyFormatter.currencyCode) //Will display "USD", for example 会返回objectForKey: Swift编程语言建议使用可选绑定,以便安全地打开选项。因此,您的代码应如下所示:

AnyObject?