Xcode在可选值中找到nil并且崩溃了Swift

时间:2017-06-30 16:35:04

标签: ios swift xcode

我一直在这个网站上寻找我的问题的答案,但无论我做什么,我的编译器仍然给我以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

我不知道是什么导致了这种情况,因为我将所有代码都包裹在if statement中,以确保如果提交的值为nil,则会打印一条消息。

以下是代码:

@IBOutlet var textField: UITextField!

@IBOutlet var label4: UILabel!

@IBAction func buttonTapped(_ sender: Any) {

    if textField.text != nil {
        let textFieldInt: Int? = Int(textField.text!)
        let convert = textFieldInt! * 7
        label4.text = String(convert)
    }

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

}

我已经搜索了类似的问题,并且已经了解了导致此错误的原因,但我还没有找到解决方案。

有人可以帮助我吗?

我正在使用Xcode8和最新版本的Swift。

4 个答案:

答案 0 :(得分:1)

您正在使用!强制解包。您需要执行if letguard let解包,因为您强行包裹的textFieldInt可能为零。

您应该使用此代码

if let textFieldText = textField.text {
    if let textFieldInt = Int(textFieldText ){
        let convert = textFieldInt * 7
        label4.text = "\(convert)"
    } else{
        print("textFieldInt  is nil")
    }
}else{
    print("text field's text is nil, not too likely")
}

答案 1 :(得分:0)

由于textFieldIntnil

而导致崩溃

问题是textField.text不是类似数字的字符串。

 let textFieldInt: Int? = Int(textField.text!)

这就是为什么textFieldIntnil的原因:

        let convert = textFieldInt! * 7

要解决这个问题我建议使用它:

if let val = textField.text, let intVal = Int(val) {
    let convert = intVal * 7
    label4.text = String(convert)
}  else {
    label4.text = "Please enter a number!"
}

答案 2 :(得分:0)

您将textFieldInt声明为可选Int?因此,它可能为零。以下将确保它是Int

        guard let textFieldInt = textField.text as? Int else { 
            //handle fail case
            return 
        }

答案 3 :(得分:-2)

试试这个:

@IBOutlet var textField: UITextField!

@IBOutlet var label4: UILabel!

@IBAction func buttonTapped(_ sender: Any) {

  if textField.text != nil {
      if let textFieldInt: Int? = Int(textField.text!){
       let convert = textFieldInt! * 7
       label4.text = String(convert)
     }

  }

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

}