我正在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!"
}
}
}
答案 0 :(得分:0)
使用if let
或guard 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!"
}
}