2017-03-28 34 views
1

當我將Error設爲URLError時,試着訪問應用程序崩潰的'code'屬性。我得到投射到URLError,然後訪問'code'屬性會導致崩潰

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).

func somFunc(things: [Thing]?, 
      error: Error?) { 

       let errorCopy = (error as? URLError) 
       let errorCode = errorCopy?.code //Crash 
} 

我能理解鑄造返回nil,或返回nil上的代碼調用。但我不確定墜機的原因。

當我打印errorCopy之前,我嘗試閱讀「代碼」,我得到:

+0

'讓錯誤碼= errorCopy .code'它可能不是你的崩潰的考慮的事實,你是不是強迫的來源?解開它。 –

+0

它在該行上崩潰。 – scord

回答

0

我仍然無法解釋的崩潰,但我發現周圍的工作。將錯誤轉換爲NSError,然後讀取代碼屬性。

let errorCopy = (error as? NSError) 
let errorCode = errorCopy?.code 

然後,我可以使用錯誤代碼沒有崩潰:

if errorCode == URLError.cancelled.rawValue { 
//Do Something 
} 
+0

你能解釋爲什麼它是錯的嗎?它_seems_正在工作。這只是一個明顯的解決方法。我仍在尋找最正確的解決方案。 – scord

+0

你可以在'let errorCode = errorCopy?.code'後面顯示行嗎?再次,它不應該崩潰你的應用程序。 –

+0

考慮到你說的投射到URLError這個事實不是失敗,你應該切換錯誤代碼。檢查 –