简单计算如何避免Nil/nan

How to avoid Nil / nan in simple calculation

我是 swift 的初学者,我的学习项目是构建一个 'cross multiplication' 计算器。但是我该如何避免这种情况,即在不可能的计算中文本标签给出输出 NaN 或应用程序崩溃。

我认为应该在结果之后,输出的值应该被检查为有效 - 或者我错了什么? 这不起作用:

    if convert = false {
        output.text = "X"
    }

查看下面的完整代码。

@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
@IBOutlet weak var textField3: UITextField!
@IBOutlet weak var output: UILabel!

@IBAction func calculationMethod(_ sender: Any) {
    let textField1Double: Double? = Double(textField1.text!)
    let textField2Double: Double? = Double(textField2.text!)
    let textField3Double: Double? = Double(textField3.text!)

    let convert = textField3Double! * textField2Double! / textField1Double!

    if convert = false {
        output.text = "X"
    }

    let convertText = String(convert)

    output.text = convertText

}

如您所见,text 对象是一个可选对象,这意味着它可以有一个值,也可以在其中包含一个 nil。

当您使用 "bang"(感叹号)时,您将强制展开一个可选的(您确定它具有一个值,因此永远不会崩溃)。

为了避免这种情况,只需简单地使用条件绑定:

if let possibleValue = textField1.text {
  // you can now safely use the possibleValue
}
else {
  // There is no value inside the optional object
}

此外,您可以为 UITextField 创建一个扩展,而不是每次都编写 if let,只需为此使用一个计算变量:

extension UITextField {
 var doubleValue: Double {
   return textField1.text == nil ? 1 : Double(textField1.text)
 }
}

:

This string is "" by default.

当然,上面的代码片段只是一个例子,很容易崩溃,所以请根据自己的需要进行调整,祝你好运

您需要检查是否所有文本字段都包含 Double 值。如果他们这样做,您需要确保第一个文本字段不是 0。

if let textField1Double = Double(textField1.text!),
   let textField2Double = Double(textField2.text!), 
   let textField3Double = Double(textField3.text!), 
   textField1Double != 0 {
    let result = textField3Double * textField2Double / textField1Double
    output.text = String(result)
} else {
    output.text = "X"
}

提示:由于您似乎是新手,请查阅Optional Chaining以更好地理解解决方案。