从文本字段中展开两个选项

时间:2017-11-14 16:52:58

标签: swift

我正在撰写一个简单的应用程序,其中包括根据文本字段中ID和OD的用户输入计算区域。该区域的标签将被隐藏,直到输入ID和OD。我在解开ID和OD文本字段的选项时遇到问题,以避免在用户按下"返回"没有任何数字。这就是我写的,我认为不会运行区域计算代码,除非两个字段都包含数字(我只限制键盘到数字),但是当我按下"返回"在没有输入任何内容的任何一个字段中,我仍然得到" nil可选错误"在区域计算代码中。

//move onto next field after return
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
            nextField.becomeFirstResponder()
        } else{
            textField.resignFirstResponder()
        }        
        //calculate and display gasket area
        if textField == self.gasketODInput || textField == self.gasketIDInput {
            if let gasketIDString = gasketIDInput?.text, let gasketODString = gasketODInput?.text{
                    gasketArea = 0.7854*(Float(gasketODString)!*Float(gasketODString)!-Float(gasketIDString)!*Float(gasketIDString)!)
                    gasketAreaLabel.text = String(gasketArea)
                    self.gasketAreaLabel.isHidden = false
            }
        }
        return false
    }

1 个答案:

答案 0 :(得分:0)

您需要安全地展开将文本转换为Float的尝试。

if let gasketIDString = gasketIDInput?.text,
   let gasketODString = gasketODInput?.text,
   let gasketOD = Float(gasketODString),
   let gasketID = Float(gasketIDString) {

    gasketArea = 0.7854 * (gasketOD * gasketOD - gasketID * gasketID)
    gasketAreaLabel.text = String(gasketArea)
    self.gasketAreaLabel.isHidden = false
}