使用NumberFormatter时,在Swift中标签显示"可选('#')

时间:2016-10-20 01:30:19

标签: swift3 numberformatter

我有以下代码:

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

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

2 个答案:

答案 0 :(得分:0)

函数numberFormatter.string(from: NSNumber)将返回String Optional(String?)而不是String 您将需要首先打开它

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

作为奖励,在处理可选项时使用String(format: "%@ BF", formattedNumber)而不是"\(formattedNumber) BF" 当您尝试将可选值作为参数传递时,String(format :)将为您提供编译错误

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