Swift:应用程序因致命错误而崩溃:在展开Optional值时意外发现nil?

时间:2014-08-07 21:08:56

标签: ios swift

我在Stack上看了很多其他同样的错误(致命错误:在展开一个Optional值时意外发现nil?),但是我不明白在我的场景中可能等于nil因为有在崩溃线上发生了很多事情。

实际的异常是"线程1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0"它在下面指示的行上崩溃。我不确定Bool是否{{1 }}或plays等于nil。当我点击Thread 1下的条形图时,另外3行会出现同样的错误。

这些后续行都涉及spot函数,而isOccupied函数又涉及一行。我认为我解决了第一个错误,其他人将被解决。

引入播放的代码块:

    var plays = Dictionary<Int,Int>()
    var done = false
    var aiDeciding = false

错误在哪里:

func isOccupied(spot:Int)->(Bool) {
        return Bool(plays[spot]!) //ERROR LINE
    }

改为:

func isOccupied(spot:Int)->(Bool) {
        if plays != nil {
        return Bool(plays[spot]!)
        }
        else {
            return false
        }
    }

1 个答案:

答案 0 :(得分:3)

Dictionary的下标函数将返回Optional(在这种情况下为Int?),而不管密钥类型如何。这是因为您可能正在申请一个不存在的密钥。来自docs

  

因为可以请求没有值的键,a   dictionary的下标返回字典的可选值   价值类型。

你想要做这样的事情:

func isOccupied(spot: Int) -> Bool {
    if let doesPlay = plays[spot] {
        return Bool(doesPlay)
    } else {
        return false // assuming that's a sane default
    }
}