简单计算如何避免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以更好地理解解决方案。
我是 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以更好地理解解决方案。