Xcode 6.1.1“快速返回”;可选(“1234.12美元”)“;带格式化程序

Xcode 6.1.1“快速返回”;可选(“1234.12美元”)“;带格式化程序,xcode,swift,formatting,currency,Xcode,Swift,Formatting,Currency,我只是在操场上试着让这东西工作,但它不想为我工作 var total = 1234.1234 var formatter = NSNumberFormatter() formatter.numberStyle = .CurrencyStyle println("\(formatter.stringFromNumber(total))") // Returns: "Optional("$1,234.12")" instead of just "$1,234.12" 我只想向用户显示格式化的数字,

我只是在操场上试着让这东西工作,但它不想为我工作

var total = 1234.1234
var formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
println("\(formatter.stringFromNumber(total))")
// Returns: "Optional("$1,234.12")" instead of just "$1,234.12"

我只想向用户显示格式化的数字,但额外的可选位会一直显示。

您必须打开可选位:

extension Double {
    var formatted:String {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .CurrencyStyle
        return formatter.stringFromNumber(self) ?? "$0.00"
    }
}

1234.1234.formatted    // "$1,234.12"

因为您只是在操场上,并且确信可选项包含一个值, 您可以通过添加感叹号来使用强制展开:

print("\(formatter.stringFromNumber(total)!)")

请阅读NSNumberFormatter文档。
stringFromNumber()
的返回值是
String?
。然后阅读文章,了解问号的含义,以及什么是可选的……至于为什么这是可选的:不知道为什么这个问题被否决。对我来说似乎是合理的。我不知道强制展开是否是个好主意,这可能会使应用程序崩溃
nil
这将崩溃:
让一个成员:Double?=一个月零!。格式化的
与我的代码无关。在nil的情况下,我使用nil合并操作符返回一个默认值。返回类型不是可选的。它是字符串类型。您正在强制打开可选的一个成员。它正在崩溃,因为它是零。您可以使用
aNumber?。格式化的
My comment指的是以前的版本,该版本使用强制展开而不是零合并运算符,您的代码现在看起来很好:-)