-2

我有以下代码:

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.maximumFractionDigits = 2
let formattedNumber = numberFormatter.string(from: NSNumber(value: rawValue))

currentLogBF.text = "\(formattedNumber) BF"

在上面的示例中,rawValue 是一个 Double,当所有输入字段中都有值时计算得出。

currentLogBF 是我视图中的标签。

每当计算完成时,标签会显示如下内容:

Optional("12,307.01") BF

我如何摆脱“Optional()”部分,所以它只显示这个:

12,307.01 BF

有什么想法我在这里做错了吗?

4

2 回答 2

0

The function numberFormatter.string(from: NSNumber) will return you a String Optional (String?) instead of String.
You will need to unwrap it first like this

if let formattedNumber = numberFormatter.string(from: NSNumber(value: rawValue)) {
    currentLogBF.text = "\(formattedNumber) BF"
} else {
    Log.warn("Failed to format number!")
}

And as bonus, use String(format: "%@ BF", formattedNumber) rather than "\(formattedNumber) BF" when dealing with optional.
String(format:) will give you compile error when you try to pass optional value as an argument

于 2016-10-20T01:35:35.740 回答
0

展开可选值

let formattedNumber:String? = numberFormatter.string(from: NSNumber(value: rawValue))

currentLogBF.text = "\(formattedNumber!) BF" //optional string. This will result in nil while unwrapping an optional value if value is not initialized or if initialized to nil.

currentLogBF.text = "\(formattedNumber) BF" //Optional("optional string") //nil values are handled in this statement
于 2016-10-20T02:25:08.837 回答