Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 收到一封“信”;致命错误:在展开可选值“时意外发现nil”;通过UITextField中的Int可选变量_Ios_Swift_Swift2 - Fatal编程技术网

Ios 收到一封“信”;致命错误:在展开可选值“时意外发现nil”;通过UITextField中的Int可选变量

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) {

我通过UITextField中的Int可选变量收到“致命错误:在展开可选值时意外发现nil”:

meterTimeEntered被声明为:

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
。根据代码实际执行的操作,您可能需要一个更好的默认值

但这意味着你永远不会在这里撞车,这就是目标


顺便说一句,我和我的同事们来打电话给
a
crashbang
(类似于a
#!
hashbang
)。每次您在代码中看到一个,都假设您可能在那里发生崩溃。

您确实希望避免使用
如果可以的话。仅在您之前测试过的值不是
nil
的情况下使用

最好使用
并为变量为
nil
的情况提供默认值

例如,使用撞车线,您可以:

meterTimeEntered = Int(meterTimeTextField.text ?? "") ?? 0
这将删除两个
案例,删除两个可能的崩溃点
.text
可以是
nil
,因此在本例中,我们将使用默认值
“”
。第二个
是因为
Int()
可能会失败,因此默认为
0
。根据代码实际执行的操作,您可能需要一个更好的默认值

但这意味着你永远不会在这里撞车,这就是目标



顺便说一句,我和我的同事们来打电话给
a
crashbang
(类似于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