当用户键入逗号而不是点时,我的应用程序崩溃?

时间:2016-12-05 11:57:45

标签: ios swift xcode mobile

好的,所以我正在创建货币转换器应用程序。 当用户输入他想要转换的值时,他用逗号而不是点键入“9,99”,应用程序崩溃。 我怎么能阻止它?!

这是我的代码:

@IBAction func changeSteemTextField(_ sender: UITextField) {
    let str = steemTextField.text
    if (str?.isEmpty)! {
        return
    }
    let appDelegate = UIApplication.shared.delegate as! AppDelegate

    let steem = NumberFormatter().number(from: str!)?.doubleValue
    priceTextField.text = String(format: "%.4f", steem! * appDelegate.price_usd * rate)


}

@IBAction func changePriceTextField(_ sender: UITextField) {
    let str = priceTextField.text
    if (str?.isEmpty)! {
        return
    }
    let appDelegate = UIApplication.shared.delegate as! AppDelegate

    let price = NumberFormatter().number(from: str!)?.doubleValue
    steemTextField.text = String(format: "%.0f", price! / appDelegate.price_usd / rate)


    return

这是当您键入逗号而不是点时弹出的错误消息 1 所以我的想法可能是实现替换代码? 这样一旦用户输入了一个点,系统就会自动用逗号替换一个点。 这是我提出的代码,但为什么它不起作用?

let aString = ","
let newString = aString.replacingOccurrences(of: ",", with: ".")

1 个答案:

答案 0 :(得分:2)

应用程序崩溃,因为NumberFormatter(http://php.net/manual/en/class.numberformatter.php)一次只能设置为一个区域设置。在这种情况下,它设置为US,因此它期望逗号仅用于划分数千,数百万等(例如9,999)。因此,9,99是无效的数字表示。

您需要更改str,并确保将str的更改值(用点替换逗号的值)作为输入。请注意,如果有人输入欧洲格式的数字9,999.01(即9.999,01),则会失败。在这种情况下,您将明确需要为两个语言环境调用NumberFormatter,或者编写更精细的转换逻辑。