Ios 文本字段为空时的EXC_BAD_指令

Ios 文本字段为空时的EXC_BAD_指令,ios,swift,Ios,Swift,这里有一个大的n00b:-) 我为IOS制作了我的第一个应用程序,只要所有文本字段都已填充,所有内容都能正常工作。这个应用程序是一个简单的计算应用程序,我需要一些帮助,以确保应用程序不会关闭时,字段是空的 这是我按下简单计算按钮时的代码 class ViewController: UIViewController { @IBOutlet weak var panelWidthTextField: UITextField! @IBOutlet weak var panelHightTextFie

这里有一个大的n00b:-)

我为IOS制作了我的第一个应用程序,只要所有文本字段都已填充,所有内容都能正常工作。这个应用程序是一个简单的计算应用程序,我需要一些帮助,以确保应用程序不会关闭时,字段是空的

这是我按下简单计算按钮时的代码

class ViewController: UIViewController {

@IBOutlet weak var panelWidthTextField: UITextField!
@IBOutlet weak var panelHightTextField: UITextField!
@IBOutlet weak var panelsWideTextField: UITextField!
@IBOutlet weak var panelsHightTextField: UITextField!
@IBOutlet weak var panelPitchTextField: UITextField!

@IBOutlet weak var resultWithLabel: UILabel!
@IBOutlet weak var resultHightLabel: UILabel!


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
@IBAction func calculatePressButton(sender: AnyObject) {
    let w = Double(panelWidthTextField.text!)
    let sw = Double(panelsWideTextField.text!)
    let pi = Double(panelPitchTextField.text!)
    let sizew = SizeWidthModel(pw:w!,psw:sw!,ptc:pi!)
    resultWithLabel.text=String(sizew.width())

    let h = Double(panelHightTextField.text!)
    let sh = Double(panelsHightTextField.text!)
    let sizeh = SizeHightModel(ph:h!,psh:sh!,ptc:pi!)
    resultHightLabel.text=String(sizeh.hight())

}
}

这是我的问题。

希望有人能给我指出正确的方向

编辑: 由于我是一个完整的n00b在这个编码,我需要更多的som帮助理解这一点。我尝试过添加各种解决方案,但没有成功。我试图在用户将字段留空时弹出一条消息,因为计算需要填写所有字段。
如果有人有时间指导我,我将不胜感激:-)

只需检查用户是否输入了文本。在函数中,输入如下内容

if myTextField.text != "" {
     //rest of the code
}

希望这有帮助

我也花了一段时间才弄清楚选项,但希望这个解释能有所帮助: 当从字符串(panelWidthTextField.text是什么)转换为双精度时,Swift不知道该字符串是否有效。因为它可能是有效的,也可能不包含有效值(为nil),所以它是可选的String?,可以包含有效字符串,也可以是nil。但是仅仅因为它可以是nil并不意味着你可以在你的代码中使用nil

“!”表示“使用此变量中的数据,即使它为零,因为我不认为它为零。”问题是,如果它为零,则Double(零)会使你的应用程序崩溃

If-let(还有一个“If-var”)会说“查看(展开)此可选值。如果它有效,则执行第一组大括号中的操作(这是一个let或var赋值),否则执行第二组大括号中的操作

    if let w = Double(panelWidthTextField.text!) {
        // you're good to go
    } else {
        // give the user instructions on how to fix the error.
    }
nil凝聚运算符也可能有帮助。它的内容如下:

//打开a并查看它。如果它a不是零,则使用它,如果它是零,则使用默认值b

a ?? b
如果要输入默认值(如需要有效数字时为零),请尝试:


让w=Double(panelWidthTextField.text??)
让我为您指出正确的方向:。这是一个敏捷程序员的关键概念。:)我想您刚刚了解了为什么
非正式地被称为“崩溃操作符”:)可能的重复
var w = Double(panelWidthTextField.text!)?? 0