当前位置: 首页 > 知识库问答 >
问题:

如何检查零值?应用程序崩溃,即使考虑了零值。Swift[副本]

张高义
2023-03-14

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

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

致命错误:在展开可选值时意外发现nil

我以前遇到过这个问题,并通过正确检查nil的右选项来解决它。尽管现在它似乎仍然“意外地发现了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个答案

从智明
2023-03-14

使用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!"
}
范轶
2023-03-14

我相信错误发生在

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

如果textField为空,则textField。文本将为零,textField。短信 将导致崩溃。

你可以用like

        @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!"
        }
  }

 类似资料:
  • 即使在谷歌搜索了几个小时后,我也无法找出确切的问题。我已经检查了StackOverflow本身的几个答案,但未能找出问题所在。 错误跟踪如下: 主要活动代码: 更新1:我已经做了答案中建议的所有更改,但每当我单击MainActivity中的“跳过指令”按钮时,我的应用程序仍然崩溃。此外,当我从AdminLogin活动中单击“登录”按钮时,应用程序崩溃。我该怎么办? Update2:我提到了什么是N

  • 问题内容: 我已经四处搜寻,但是还没有找到一个答案,该答案并未将我引向第3方服务。我不需要任何复杂的东西,只是为了保存一个值,所以当该应用程序下次打开时,我可以显示一条警报,指出该应用程序已崩溃。 谢谢。 问题答案: 感谢@RyanCollins的一点帮助,我能够自己解决问题。“ 应用程序委托”中的功能仅在应用程序正常关闭时运行。用于本地检测应用程序崩溃的代码如下所示。 全局定义的变量 应用程序委

  • 03-29 19:26:37.449 176 02-17602/com.developerillusion.hive e/androidruntime:致命异常:main process:com.developerillusion.hive,pid:17602 java.lang.runtimeexception:无法启动活动ComponentInfo{com.developerillusion.

  • 一调用方法,我的计时器应用程序就崩溃了,它显示的对象引用为空,尽管我做得正确,但我找不到问题。请,某人,看看下面的代码:(我也附上logcat) 原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void android.os.CountDownTimer.Cancel()”

  • 我使用下面的代码插入了捕获图像,并获得了< code >“not null”,这表明数据不为null。 然而,当我试图检索捕获的图像时,应用程序崩溃了。 MyDatabaseHelper.java 原因:Java . lang . illegalstateexception:无法从CursorWindow读取第0行第0列。在从游标访问数据之前,请确保游标已正确初始化。at Android . da

  • 我就是这样做的https://tour.golang.org/moretypes/10我修改了代码,希望得到相同的结果。我没有。这是错误还是文档错误?美国之旅 nil片的长度和容量为0。 我的y变量的长度和容量为0。 这是我的输出。 我还以为会有第二个“零”~为什么我没拿到?