-1
當我從服務器獲取數據,將顯示下面我的代碼致命錯誤:意外發現零而展開的可選值JSON
URLSession.shared.dataTask(with: myRequest, completionHandler: { (data:Data?, response:URLResponse?, error:Error?) -> Void in
DispatchQueue.main.async {
if error != nil {
}
do {
if let json = try JSONSerialization.jsonObject(with: (data)!, options: .mutableContainers) as? NSMutableDictionary {
}
}
}
不能使用嘗試DO/catch塊之外,無須轉換爲可選,另外JSONSerialization返回任何,所以它必須強制轉換,這一切卻可以在一個以及製作後衛語句來完成:後衛let data = data,讓dict =(try?JSONSerialization.jsonObject(...))爲? [字符串:任何]其他{//錯誤處理} – apocolipse
@apocolipse,我的錯。忘了添加「?」。至於類型轉換 - 這取決於需求。我不喜歡有這麼多括號的巨大線條 – rkyr
JSON鑄造是必要的。使用Swift 3.0,它的默認值爲[Any]或[String:Any],因此返回Any,這樣用戶就可以選擇他們投射的內容。 守衛/讓綁定的美麗做到這一切意味着你可以把所有條件放在一個地方,如果有任何失敗,儘早提供保釋,但它們不需要在一行上,但可以拆分爲三部分,而不是2,這消除了需要包裝的嘗試?聲明以避免雙重選擇權。 – apocolipse