我有以下代码:
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
我在这里做错了什么想法?
答案 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