我正在尝试转换用户输入的文本字段的值。由于用户也可以输入欧洲数字格式的十进制值,我使用numberformatter。这就是我的尝试:
let newprice = MaximumPriceLabel.text as! String
print(newprice) -> result: Optional("10,00")
print(formatter.number(from: newprice as String)) -> result: nil
print(Double(formatter.number(from: ("10,11"))!)) -> result: 10.11 -> that is what I want
因此在变量newprice中存储了一个值,但在格式化时,它返回nil。当我用手动值测试时,它可以工作。有什么我做错了吗? Formatter.local设置为Locale.current。
更新:问题似乎是MaximumPriceLabel.text不仅包含我需要的值,还包含文本"可选(" 10,00" ) - 转换为数字时失败。该值填充如下:
self.MaximumPriceLabel.text = String(describing: formatter.string(from: NSNumber(value: desprice)))
当我之后进行打印时,我会收到"可选("可选(\" 10,00 \")")" - >即使我先清除变量MaximumPriceLabel.text。
答案 0 :(得分:1)
你需要学习如何处理选项。
您的第一个问题是如何设置标签的文本。请注意,NumberFormatter string(from:)
会返回可选的String
。永远不要使用String(describing:)
来向用户显示信息。那应该只用于调试。
首先改变:
self.MaximumPriceLabel.text = String(describing: formatter.string(from: NSNumber(value: desprice)))
为:
if let text = formatter.string(from: NSNumber(value: desprice)) {
MaximumPriceLabel.text = text
}
这将解决标签文本Optional(...)
。
然后,将标签文本转换回字符串的代码需要更新为:
if let newprice = MaximumPriceLabel.text {
if let price = formatter.number(from: newprice) {
print("The price is \(price)")
} else {
print("Invalid number: \(newprice)")
}
}