在解包一个可选值swift时发现nil(SpriteKit)

时间:2015-10-05 23:31:16

标签: ios swift

我在Cookie.swift中有这个功能

func returnMax() -> String {
    var tmpMax: Int = 0
    var typeMax: String = ""
    for (symType, symCnt) in count {
        if symCnt > tmpMax {
            tmpMax = symCnt
            typeMax = symType
        }
    }
    print(typeMax)
    return typeMax
}

我将一个按钮链接到我的GameViewController.swift作为动作。当点击该按钮时,它应该在日志中显示我在returnMax函数中找到的typeMax

@IBAction func ampAns(sender: AnyObject) {
    cookie.returnMax()
}

但我没有得到预期的结果,而是获得了fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)。可能出现什么问题?谢谢!

2 个答案:

答案 0 :(得分:1)

你已经声明你的变量cookie像一个可选的,总是根据你的声明var cookie: Cookie!有一个值(这样你就告诉编译器这个变量没有必要要检查非值,您可以确保在访问时它始终具有值),并且出于某种原因,您在初始化之前使用该变量。您必须首先初始化变量然后使用它。

或者您可以使用optional binding来避免运行时错误,在使用变量之前进行检查,如下所示:

@IBAction func ampAns(sender: AnyObject) {
   if let cookie = self.cookie {
      cookie.returnMax()
   }
}

我希望这对你有所帮助。

答案 1 :(得分:-1)

您的问题是您没有将回报保存到变量中。

对GameViewController.swift的此更改应该可以解决您的问题。

@IBAction func ampAns(sender: AnyObject) {
  let typeMax: String = cookie.returnMax()
}