如何检查零值?即使考虑了零值,应用程序也会崩溃。迅速

时间:2017-07-05 12:34:00

标签: ios swift xcode

我正在Xcode上创建一个简单的猜谜游戏,用户必须正确猜测数字(0到5之间)。我认为我检查了textFieldInt的零值,以确保在没有提交任何值的情况下应用程序不会崩溃。不幸的是,情况似乎并非如此,我不确定我的错在哪里。

如果我没有输入值并按下按钮,则会收到以下错误消息:

  

致命错误:在解包可选值时意外发现nil

之前我遇到过这个问题,并设法通过正确检查nil的正确选项来解决它。虽然现在似乎仍然“意外地发现了零”,即使已经考虑了零值。

@IBOutlet var textField: UITextField!

@IBOutlet var label: UILabel!

@IBAction func buttonTapped(_ sender: Any) {
    let textFieldInt: UInt32 = UInt32(textField.text!)!
    let number = arc4random_uniform(6)

    if textFieldInt != nil {
        if textFieldInt != number {
            label.text = "Wrong! It was \(number)"
        }
        else if textFieldInt == number {
            label.text = "You're right!"
        }

    else {
        label.text = "Please enter a number!"
    }
}
}

2 个答案:

答案 0 :(得分:0)

使用if letguard let来测试您的值。例如

if let textFieldInt = UInt32(textField.text!)  {
    //textField.text! can be converted to UInt32
    if textFieldInt != number {
        label.text = "Wrong! It was \(number)"
    }
    else if textFieldInt == number {
        label.text = "You're right!"
    }
}else {
    //textField.text! can NOT be converted to UInt32
    label.text = "Please enter a number!"
}

或者

guard let textFieldInt = UInt32(textField.text!) else {
    //textField.text! can NOT be converted to UInt32
    label.text = "Please enter a number!"
    return
}
//textField.text! can be converted to UInt32
if textFieldInt != number {
    label.text = "Wrong! It was \(number)"
}
else if textFieldInt == number {
    label.text = "You're right!"
}

答案 1 :(得分:0)

我认为错误发生在

let textFieldInt: UInt32 = UInt32(textField.text!)!

如果textField为空,那么textField.text将为零,textField.text!将导致崩溃。

您可以使用

        @IBAction func buttonTapped(_ sender: Any) {
            if textField.text != nil {
         let textFieldInt: UInt32 = UInt32(textField.text!)!
            let number = arc4random_uniform(6)

            if textFieldInt != nil {
                if textFieldInt != number {
                    label.text = "Wrong! It was \(number)"
                }
                else if textFieldInt == number {
                    label.text = "You're right!"
                }

            else {
                label.text = "Please enter a number!"
            }
        }
      }
              else {
              label.text = "Please enter a number!"
        }
  }