我一直在这个网站上寻找我的问题的答案,但无论我做什么,我的编译器仍然给我以下错误:
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。
答案 0 :(得分:1)
您正在使用!
强制解包。您需要执行if let
或guard 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)
由于textFieldInt
为nil
问题是textField.text
不是类似数字的字符串。
let textFieldInt: Int? = Int(textField.text!)
这就是为什么textFieldInt
在nil
的原因:
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!"
}
}