如何确保在 TextField 中进行双重输入? (Swift)

How do I ensure a double input in a TextField? (Swift)

这里是 Swift 的新手。我正在制作一个应用程序,它将通过 TextField 从用户那里获取价格,并计算小费。为了让它不崩溃,我希望它只接受一个有效的双精度值,但我不确定该怎么做。

处理这个过程的按钮函数:

@IBAction func calculate_eighteen_perc(_ sender: Any) {
    let bill:Double = round(Double(user_bill_input.text!)! * 100) / 100.0
    let tip:Double = round(bill * 0.18 * 100) / 100.0
    let total:Double = bill + tip
    result_display.text = "Tip Amount: $\(tip); Total: $\(total)"
}

据我所知,会导致程序崩溃的情况是:

  1. 数字前的空格。
  2. 输入任何非数字字符。
  3. 多个小数点。
  4. 空输入(无)。

有没有办法优雅地处理这个问题,而不用写一个条件来检查每个案例? 在此先感谢您的帮助。

由于您确定的原因,您通常希望避免强制解包——无效的条目会使您的应用程序崩溃。如果用户的输入不是 Double,Double(user_bill_input_text) 不会让您的应用程序自行崩溃。 return 从 String 转换为 Double 的类型是可选的 Double,如果出现您确定的无效输入条件之一,其值将简单地为 nil。

然后,你可以使用一个 guard 语句,如果值为非 nil,则函数的其余部分将执行。如果是,您可以设置错误条件并安全退出该函数。

@IBAction func calculate_eighteen_perc(_ sender: Any) {
    let input = Double(user_bill_input_text)
    guard let input = input else {
        print("Invalid entry. Try again.")
        return
    }
    // put the rest of the code that you only want to execute if the input 
    // is a valid Double here
}