Ios 文本字段为空时的EXC_BAD_指令
这里有一个大的n00b:-) 我为IOS制作了我的第一个应用程序,只要所有文本字段都已填充,所有内容都能正常工作。这个应用程序是一个简单的计算应用程序,我需要一些帮助,以确保应用程序不会关闭时,字段是空的 这是我按下简单计算按钮时的代码Ios 文本字段为空时的EXC_BAD_指令,ios,swift,Ios,Swift,这里有一个大的n00b:-) 我为IOS制作了我的第一个应用程序,只要所有文本字段都已填充,所有内容都能正常工作。这个应用程序是一个简单的计算应用程序,我需要一些帮助,以确保应用程序不会关闭时,字段是空的 这是我按下简单计算按钮时的代码 class ViewController: UIViewController { @IBOutlet weak var panelWidthTextField: UITextField! @IBOutlet weak var panelHightTextFie
class ViewController: UIViewController {
@IBOutlet weak var panelWidthTextField: UITextField!
@IBOutlet weak var panelHightTextField: UITextField!
@IBOutlet weak var panelsWideTextField: UITextField!
@IBOutlet weak var panelsHightTextField: UITextField!
@IBOutlet weak var panelPitchTextField: UITextField!
@IBOutlet weak var resultWithLabel: UILabel!
@IBOutlet weak var resultHightLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func calculatePressButton(sender: AnyObject) {
let w = Double(panelWidthTextField.text!)
let sw = Double(panelsWideTextField.text!)
let pi = Double(panelPitchTextField.text!)
let sizew = SizeWidthModel(pw:w!,psw:sw!,ptc:pi!)
resultWithLabel.text=String(sizew.width())
let h = Double(panelHightTextField.text!)
let sh = Double(panelsHightTextField.text!)
let sizeh = SizeHightModel(ph:h!,psh:sh!,ptc:pi!)
resultHightLabel.text=String(sizeh.hight())
}
}
这是我的问题。
希望有人能给我指出正确的方向
编辑:
由于我是一个完整的n00b在这个编码,我需要更多的som帮助理解这一点。我尝试过添加各种解决方案,但没有成功。我试图在用户将字段留空时弹出一条消息,因为计算需要填写所有字段。
如果有人有时间指导我,我将不胜感激:-)只需检查用户是否输入了文本。在函数中,输入如下内容
if myTextField.text != "" {
//rest of the code
}
希望这有帮助 我也花了一段时间才弄清楚选项,但希望这个解释能有所帮助: 当从字符串(panelWidthTextField.text是什么)转换为双精度时,Swift不知道该字符串是否有效。因为它可能是有效的,也可能不包含有效值(为nil),所以它是可选的String?,可以包含有效字符串,也可以是nil。但是仅仅因为它可以是nil并不意味着你可以在你的代码中使用nil “!”表示“使用此变量中的数据,即使它为零,因为我不认为它为零。”问题是,如果它为零,则Double(零)会使你的应用程序崩溃 If-let(还有一个“If-var”)会说“查看(展开)此可选值。如果它有效,则执行第一组大括号中的操作(这是一个let或var赋值),否则执行第二组大括号中的操作
if let w = Double(panelWidthTextField.text!) {
// you're good to go
} else {
// give the user instructions on how to fix the error.
}
nil凝聚运算符也可能有帮助。它的内容如下:
//打开a并查看它。如果它a不是零,则使用它,如果它是零,则使用默认值b
a ?? b
如果要输入默认值(如需要有效数字时为零),请尝试:
让w=Double(panelWidthTextField.text??)
让我为您指出正确的方向:。这是一个敏捷程序员的关键概念。:)我想您刚刚了解了为什么!
非正式地被称为“崩溃操作符”:)可能的重复
var w = Double(panelWidthTextField.text!)?? 0