2015-06-24 3 views
18

ieri ho aggiornato a El Capitan beta 2 e Xcode 7 - beta è obbligatorio. Così ho aggiornato la mia app a Swift 2 e il nuovo errore arriva alla stringa json. Questo è il mio codice:Swift 2 jSON La chiamata può lanciare ma non è contrassegnata con try

let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary

e questo è l'errore: Call can throw , but it is not marked with 'try' and the error is not handled

risposta

37

Hai bisogno di avvolgerlo in un blocco do/catch in quanto questo è il modo preferito di segnalazione degli errori, piuttosto che utilizzare NSError:

do { 
    let jsonData = try NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary 
    // use jsonData 
} catch { 
    // report error 
} 
+1

la ringrazio per la risposta, comunque questo non risolve il problema: \ – markutus

+5

ho cambiato con let 'jsonData = provare NSJSONSerialization.JSONObjectWithData (URLData !, opzioni: NSJSONReadingOptions. MutableContainers) as! NSDictionary' e funziona – markutus

+0

@markutus Ah si; scuse per l'errore. – Droppy

0
var UserDict = NSJSONSerialization.JSONObjectWithData(responseData, options:nil, error: &error) as? NSDictionary 
println("== \(UserDict)") 
2

Mettere il termine "provare!" dopo il segno di uguale.

let jsonData:NSDictionary = try! NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary 

Non è necessario quindi, per la clausola di cattura, o per una dichiarazione di lanci. Farlo sarebbe una buona idea se non riesci davvero a recuperare da un fallimento lì.

Per ulteriori informazioni, vedere: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html