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

Ios 当用户键入逗号而不是点时,我的应用程序崩溃?,ios,swift,xcode,mobile,Ios,Swift,Xcode,Mobile,好的,我正在创建一个货币转换器应用程序。 当用户输入他想要转换的值,并用逗号而不是点键入“9,99”时,应用程序崩溃。 我怎么能阻止它 这是我的密码: @IBAction func changeSteemTextField(_ sender: UITextField) { let str = steemTextField.text if (str?.isEmpty)! { return } let appDelegate = UIApplicati

好的,我正在创建一个货币转换器应用程序。 当用户输入他想要转换的值,并用逗号而不是点键入“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
这是当您键入逗号而不是点时弹出的错误消息 所以我的想法是实现一个替换代码? 这样,一旦用户键入一个点,系统就会自动用逗号替换它。 这是我提出的代码,但为什么它不起作用

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

为了使其工作,您需要将
let str.
更改为
var str
,然后更改值。此代码运行良好:

var str = "99.5"

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

let price = NumberFormatter().number(from: str)?.doubleValue

为了使其工作,您需要将
let str.
更改为
var str
,然后更改值。此代码运行良好:

var str = "99.5"

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

let price = NumberFormatter().number(from: str)?.doubleValue

应用程序崩溃,因为NumberFormatter()一次只能设置为一个语言环境。在本例中,它被设置为US,因此它希望逗号仅用于分隔数千、数百万等(例如9999)。因此,9,99是无效的数字表示形式


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

应用程序崩溃,因为NumberFormatter()一次只能设置为一个语言环境。在本例中,它被设置为US,因此它希望逗号仅用于分隔数千、数百万等(例如9999)。因此,9,99是无效的数字表示形式


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

什么是
汇率
?@MaxPevsner汇率取决于货币,例如美元:case“USD”:label.text=“$”+price\u kind rate=1.0“不起作用”是什么问题?发布包含
replacingOccurrences
的非工作代码。检查
price
appDelegate.price_usd
rate
是否都有值,并且不是
nil
或0。我的建议是不要用点替换逗号。您应该显示无效输入警报,以提醒用户他输入的内容无效。因为,如果用户想要转换9999.99,该怎么办。您不能将此处的逗号转换为点。
汇率是多少?@MaxPevsner汇率取决于货币,例如美元:case“USD”:label.text=“$”+price\u kind rate=1.0“不起作用”是什么问题?发布包含
replacingOccurrences
的非工作代码。检查
price
appDelegate.price_usd
rate
是否都有值,并且不是
nil
或0。我的建议是不要用点替换逗号。您应该显示无效输入警报,以提醒用户他输入的内容无效。因为,如果用户想要转换9999.99,该怎么办。这里的逗号不能转换成点。