我正在尝试使用文本字段创建课程平均计算器。但是,如果我只想输入几个标记(即不填写所有文本字段),则会崩溃。
我收到此错误:
线程1:致命错误:展开一个可选值时意外发现nil
在我的代码中,我尝试避免使用此nil值,但是如果我将第一个文本字段保留为空白,则会在第一行出现错误。我对这些文本字段进行了进一步的计算,所以不确定在修复这些行后是否会出现类似的错误。
if b?.text != nil {
b?.text = String(Double(b!.text!)!/100)
}
if d?.text != nil {
d?.text = String(Double(d!.text!)!/100)
}
if f?.text != nil {
f?.text = String(Double(f!.text!)!/100)
}
if h?.text != nil {
h?.text = String(Double(h!.text!)!/100)
}
答案 0 :(得分:0)
强制展开双重转换
Double(b!.text!)!
是原因,因为空字符串不能转换为double,所以它返回nil,并且当您使用!
时,因此崩溃,您需要
if let tex = b , content = tex.text , value = Double(content) {
print(value)
}
也不要将b var设为可选!
var b:UITextField! // and make sure you init it
编辑:不要创建其他变量来保存实例变量,直接使用它们
@IBOutlet weak var weight1: UITextField!
if let content = weight1.text , value = Double(content) {
print(value)
weight1.text = "\(value/100)"
}
答案 1 :(得分:0)
Double(b!.text!)!
这是原因,您输入的文本(b!.text!)无法转换为两倍,因此最终为nil。
例如:您可能会输入“ 12Th45”,这不能转换为双精度。
无论您不确定该值是否存在,始终使用可选绑定。
谢谢。