簡體   English   中英

Swift:應用程式因致命錯誤當機:解壓縮Optional值時意外發現nil?

[英]Swift: App crashing with fatal error: unexpectedly found nil while unwrapping an Optional value?

我在堆棧上的其他地方查看了相同的錯誤(嚴重錯誤:在解開可選值時意外發現nil?),但我不了解在我的情況下什么可能等於nil,因為發生了太多事情崩潰線。

實際的異常是“線程1:EXC_BAD_INSTRUCTION(代碼= EXC_1386_INVOP,子代碼= 0x0”,它在下面指示的行上崩潰。我不確定布爾, playsspot是否等於nil。也會發生此錯誤在其他3行上,當我單擊線程1下的條時。

這些后續行都涉及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
        }
    }

無論鍵類型如何, Dictionary的下標函數都將返回Optional (在本例中為Int? )。 這是因為您可能正在請求一個不存在的密鑰。 文檔

因為可以請求不存在任何值的鍵,所以字典的下標返回字典值類型的可選值。

您將需要執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM