Ios 收到一封“信”;致命错误:在展开可选值“时意外发现nil”;通过UITextField中的Int可选变量
我通过UITextField中的Int可选变量收到“致命错误:在展开可选值时意外发现nil”: meterTimeEntered被声明为:Ios 收到一封“信”;致命错误:在展开可选值“时意外发现nil”;通过UITextField中的Int可选变量,ios,swift,swift2,Ios,Swift,Swift2,我通过UITextField中的Int可选变量收到“致命错误:在展开可选值时意外发现nil”: meterTimeEntered被声明为: var meterTimeEnetered=Int?() backgroundTap函数-当用户点击背景并触发startTime函数时的函数-当用户在UITextField中输入数字或从位于MKMapView顶部的UITextField退出后,我使用此函数: @IBAction func backgroundTap(sender: UIControl) {
var meterTimeEnetered=Int?()
backgroundTap函数-当用户点击背景并触发startTime函数时的函数-当用户在UITextField中输入数字或从位于MKMapView顶部的UITextField退出后,我使用此函数:
@IBAction func backgroundTap(sender: UIControl) {
if meterTime > 0{
return
} else {
if meterTimeTextField.text != nil{
meterTimeTextField.resignFirstResponder()
startTime()
timerDisplay.text = String(displayMeterTime)
self.parkItButton.hidden = true
self.UnparkButton.hidden = false
self.mapView.hidden = false
self.findItButton.hidden = false
self.timerDisplay.hidden = false
}
}
//self.meterTimeTextField.hidden = true
//meterTimeTextField = nil
// } else {
// // nilTextFieldEntryAlert()
// }
}
startTime函数-meterTimeEntered=Int(metertimeextfield.text!)代码>是我得到错误的地方:
func startTime(){
meterTimeEntered = Int(meterTimeTextField.text!)!
if meterTimeEntered != 0 {
meterTime = (meterTimeEntered! * 60)
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateCounter"), userInfo: nil, repeats: true)
self.timerDisplay.hidden = false
self.meterTimeTextField.hidden = true
} else {
nilTextFieldEntryAlert()
}
}
谢谢 你真的想避免使用代码>如果可以的话。仅在您之前测试过的值不是nil
的情况下使用
最好使用?
并为变量为nil
的情况提供默认值
例如,使用撞车线,您可以:
meterTimeEntered = Int(meterTimeTextField.text ?? "") ?? 0
这将删除两个代码>案例,删除两个可能的崩溃点.text
可以是nil
,因此在本例中,我们将使用默认值“”
。第二个?
是因为Int()
可能会失败,因此默认为0
。根据代码实际执行的操作,您可能需要一个更好的默认值
但这意味着你永远不会在这里撞车,这就是目标
顺便说一句,我和我的同事们来打电话给
acrashbang
(类似于a#!
hashbang
)。每次您在代码中看到一个,都假设您可能在那里发生崩溃。您确实希望避免使用代码>如果可以的话。仅在您之前测试过的值不是nil
的情况下使用
最好使用?
并为变量为nil
的情况提供默认值
例如,使用撞车线,您可以:
meterTimeEntered = Int(meterTimeTextField.text ?? "") ?? 0
这将删除两个代码>案例,删除两个可能的崩溃点.text
可以是nil
,因此在本例中,我们将使用默认值“”
。第二个?
是因为Int()
可能会失败,因此默认为0
。根据代码实际执行的操作,您可能需要一个更好的默认值
但这意味着你永远不会在这里撞车,这就是目标
顺便说一句,我和我的同事们来打电话给
acrashbang
(类似于a#!
hashbang
)。每次你在代码中看到一个,就假设你有可能崩溃。请发布实际代码而不是屏幕截图。我的金鱼内存无法处理它来实际帮助您。请将meterTimeTextField.text
打印到控制台,作为startTime()
@Jojodmo meterTimeTextField.text的输出是meterTimeTextField.text可选(“”)的第一行不如测试事物是否为零,并根据结果而不是使用结果进行响应!试图强制它们吗?@JTan这就是为什么-您试图强制展开一个nil值,meterTimeTextField.text
请发布实际代码而不是屏幕截图。我的金鱼内存无法处理它来实际帮助您。请将meterTimeTextField.text
打印到控制台,作为startTime()
@Jojodmo meterTimeTextField.text的输出是meterTimeTextField.text可选(“”)的第一行不如测试事物是否为零,并根据结果而不是使用结果进行响应!试图强制它们?@JTan这就是为什么-你试图强制展开一个nil值,meterTimeTextField.text
我认为使用guard
会是一个更好的方法,因为将meterTimeTextField.text
作为Int是必须的。@Dave Wood-每当我点击背景,加载应用程序后,它将触发backgroundTap功能。我确实希望meterTimeTextField.text为零,因此在检查meterTimeText.field!=nil?@Eendje肯定guard
可以工作,但在这种情况下可能会导致代码重复,因为在if
中仍然有else
。使用默认值可以防止重复。@j我不知道你在说什么,但关键是你不能使用代码>如果值可以是nil
。那样的话你会崩溃的。因此,您必须首先检查nil
,并以某种方式处理它。我上面的例子只是一种方法,它使您的代码基本保持不变。如果您愿意,您可以显式检查nil
。我认为使用guard
将是一个更好的方法,因为将meterTimeTextField的值设置为Int是必需的。text
作为Int是必需的。@Dave Wood-每当我点击背景时,一旦加载应用程序,它就会触发backgroundTap函数。我确实希望meterTimeTextField.text为零,因此在检查meterTimeText.field!=nil?@Eendje肯定guard
可以工作,但在这种情况下可能会导致代码重复,因为在if
中仍然有else
。使用默认值可以防止重复。@j我不知道你在说什么,但关键是你不能使用代码>如果值可以是nil
。那样的话你会崩溃的。因此,您必须首先检查nil
,并以某种方式处理它。我上面的例子只是一种方法,它使您的代码基本保持不变。如果愿意,可以显式检查nil
。