Ios 致命错误:在展开可选值(验证空文本字段时)时意外发现nil
我正在尝试验证空文本字段,即如果文本字段为空,则显示警报消息,但收到错误: 致命错误:在展开可选值时意外发现nil 这是我的代码:Ios 致命错误:在展开可选值(验证空文本字段时)时意外发现nil,ios,swift,Ios,Swift,我正在尝试验证空文本字段,即如果文本字段为空,则显示警报消息,但收到错误: 致命错误:在展开可选值时意外发现nil 这是我的代码: dateComponents.month = String(monthTextField.text!).toInt()! dateComponents.day = String(dayTextField.text!).toInt()! dateComponents.year = String(yearTextField.text!).toInt()
dateComponents.month = String(monthTextField.text!).toInt()!
dateComponents.day = String(dayTextField.text!).toInt()!
dateComponents.year = String(yearTextField.text!).toInt()!
if self.monthTextField.text == ""{
let alertController = UIAlertController(title: "Month", message:
"Please enter 2 digits in the 'mm' field, e.g. 01 for January", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, animated: true, completion: nil)
}
空字符串不能转换为整数。因此,即使在进行if展开之前,代码也会失败。我建议您将代码更改为展开整数而不是字符串,它应该可以工作。如果
monthTextField
的text
属性是空字符串(“”
),那么问题中的代码第一行将抛出您看到的致命错误。这是因为toInt()
将返回nil
,而您正试图使用强制将其展开代码>(这将始终导致崩溃)
像您现在这样使用强制展开将是一个问题。如果您的文本字段为nil
或其text
属性中有非数字字符串,则这是一个致命错误。我将使用可选绑定和可选链接的组合来验证文本字段中的文本(以及文本字段本身,如果需要的话)。看起来是这样的:
var monthTextFields: UITextField? // Set via code or xib or storyboard, doesn't matter
if let month = monthTextField?.text?.toInt() {
/* month is now an Int that you can safely use */
} else {
/* the text is not a valid Int, display your alert */
}
该代码不会崩溃,因为它确保不会在每一步都打开nil
值。if
行的基本意思是:“如果monthTextField
不是nil
,并且它的text
属性不是nil
,并且在它的text
属性上调用toInt()
不会返回nil
,然后将月
设置为toInt()的结果。”.monthTextField应该如何初始化?消息说它没有被删除。您必须检查self.monthTextField.text和其他文本是否为零。nil和“”不一样。在显式展开它们之前,需要执行此操作。另外,您是否绝对确定它们可以转换为Int?如果您指出是哪条语句导致了错误,这也很有帮助。text属性定义在text因此它不能为零,但UITextField本身可能为零